Newest 'ffmpeg' Questions - Stack Overflow

http://stackoverflow.com/questions/tagged/ffmpeg

Les articles publiés sur le site

  • ffmpeg to transcode streaming video and storage

    8 septembre 2011, par icarus74

    Examples of ffmpeg that I've seen so far all seem to accept a file on disk storage as input, to transcode it into another file in disk storage as output. Also i've come accross ffserver which can be used to stream-out video. However, yet to find a good tutorial or example of ffmpeg used to transcode streaming video/audio, constrained by say parameters like running-time or no. of frames or other event, and save the transcoded media on disk.

    Any pointers, tips or hints would really help.

  • av_read_frame return -32 before EOF in case of gsm_ms/gsm wav files

    8 septembre 2011, par user924702

    av_read_frame function is returning -32 after 5/6 frames but I have very large file. This behaviour of the code is only for libgsm wav files only. If I play .mp3 or other wav files there is no error.

    Can some one help me why av_read_frame return -32 before EOF in case of libgsm_ms file on android platfrom.

    Below id my source code:

    while (mCurrentState != MEDIA_PLAYER_DECODED 
        && mCurrentState != MEDIA_PLAYER_STOPPED 
        && mCurrentState != MEDIA_PLAYER_STATE_ERROR )
    {
        __android_log_print(ANDROID_LOG_INFO, TAG, "Inside Decoder Run Loop.");
        if (mDecoderAudio->packets() > FFMPEG_PLAYER_MAX_QUEUE_SIZE) {
            __android_log_print(ANDROID_LOG_INFO, TAG, "mDecoderAudio->packets()  > FFMPEG_PLAYER_MAX_QUEUE_SIZE, lets sleep for 2mili sec.");
            usleep(200);
            continue;
        }
        __android_log_print(ANDROID_LOG_INFO, TAG, "Lets read frame using av_read_frame: %u",mMovieFile);
        int nResult = av_read_frame(mMovieFile, &pPacket);
        __android_log_print(ANDROID_LOG_INFO, TAG, "Read frameresult: %d",nResult);
        if(nResult < 0) {
            mCurrentState = MEDIA_PLAYER_DECODED;
            __android_log_print(ANDROID_LOG_INFO, TAG, "No more frame to decode.");
            continue;
        }
        if(mCurrentState == MEDIA_PLAYER_PAUSED){
            __android_log_print(ANDROID_LOG_INFO, TAG,"Player state is MEDIA_PLAYER_PAUSED.");
            continue;
        }
        if (pPacket.stream_index == mAudioStreamIndex) {
            __android_log_print(ANDROID_LOG_INFO, TAG,"Lets Enqueue Packet");
            mDecoderAudio->enqueue(&pPacket);
        }
        else {
             __android_log_print(ANDROID_LOG_INFO, TAG,"Lets Free Packet");
            av_free_packet(&pPacket);
        }
    }
    
  • Generate video thumbnail using ffmpeg ; Grab from RTMP server

    7 septembre 2011, par Chad Whitaker

    I have research how to generate a video thumbnail user FFMPEG like so:

    ffmpeg -i myfile.flv -vcodec mjpeg -vframes 1 -an -f rawvideo -s 640x480 foo.jpg

    But how can I generate a thumbnail when the file is on another server? Specifically a RTMP server? for example: rtmp://foo.rtmphost.com/videos

  • ffmpeg paly sound on iphone [closed]

    7 septembre 2011, par The Psicopath

    someone help me to play audio on iphone using the ffmpeg (libavcodec libavdevice ibavformat libavutil libswscale ) ?? because in the iFrameExtractor there aren't examples to play sound! Thanks

  • Wav File Encoding with FFMPEG

    7 septembre 2011, par user924702

    I want to convert raw PCM data(Taken from Android Phone mic) into a libGSM Wave file. After encoding into file, VLC player shows right codec information and duration but unable to play contents. Please help me to find what I am doing wrong.

    Below is my code for encoding and header writing:

    void EncodeTest(uint8_t *audioData, size_t audioSize)
    {
        AVCodecContext  *audioCodec;
        AVCodec *codec;
        uint8_t *buf;    int bufSize, frameBytes;
        __android_log_print(ANDROID_LOG_INFO, DEBUG_TAG,"Lets encode :%u with size %d\n",(int)audioData, (int)audioSize);
        //Set up audio encoder
        codec = avcodec_find_encoder(CODEC_ID_GSM);
        if (codec == NULL){
            __android_log_print(ANDROID_LOG_ERROR, DEBUG_TAG,"ERROR:: Unable to find encoder(CODEC_ID_GSM)");
            codec = avcodec_find_encoder(CODEC_ID_GSM);
            if (codec == NULL){
                __android_log_print(ANDROID_LOG_ERROR, DEBUG_TAG,"ERROR:: Unable to find encoder(CODEC_ID_GSM)");
                return;
            }
        }
        audioCodec                  = avcodec_alloc_context();
        audioCodec->channels        = 1;
        audioCodec->sample_rate     = 8000;
        audioCodec->sample_fmt      = SAMPLE_FMT_S16;
        audioCodec->bit_rate        = 13200;
        audioCodec->priv_data       = gsm_create();
    
        switch(audioCodec->codec_id) {
            case CODEC_ID_GSM:
                audioCodec->frame_size = GSM_FRAME_SIZE;
                audioCodec->block_align = GSM_BLOCK_SIZE;
                int one = 1;
                gsm_option(audioCodec->priv_data, GSM_OPT_WAV49, &one);
                break;
            case CODEC_ID_GSM_MS: {
                int one = 1;
                gsm_option(audioCodec->priv_data, GSM_OPT_WAV49, &one);
                audioCodec->frame_size = 2*GSM_FRAME_SIZE;
                audioCodec->block_align = GSM_MS_BLOCK_SIZE;
            }
        }
        audioCodec->coded_frame= avcodec_alloc_frame();
        audioCodec->coded_frame->key_frame= 1;
        audioCodec->time_base       = (AVRational){1,  audioCodec->sample_rate};
        audioCodec->codec_type      = CODEC_TYPE_AUDIO;
    
        if (avcodec_open(audioCodec, codec) < 0){
            __android_log_print(ANDROID_LOG_ERROR, DEBUG_TAG,"ERROR:: Unable to avcodec_open");
            return;
        }
    
        bufSize     = FF_MIN_BUFFER_SIZE * 10;
        buf         = (uint8_t *)malloc(bufSize);
        if (buf == NULL) return;
        frameBytes = audioCodec->frame_size * audioCodec->channels * 2;
        FILE *fileWrite = fopen(FILE_NAME,"w+b");
        if(NULL == fileWrite){
            __android_log_print(ANDROID_LOG_ERROR, DEBUG_TAG,"ERROR:: Unable to open file for reading.");
        }
        /*Write wave header*/
        WriteWav(fileWrite, 32505);/*Just for test*/
    
        /*Lets encode raw packet and write into file after header.*/
        __android_log_print(ANDROID_LOG_INFO, DEBUG_TAG,"Lets Encode Actual Bytes");
        int nChunckSize = 0;
        while (audioSize >= frameBytes)
        {
            int packetSize;
    
            packetSize = avcodec_encode_audio(audioCodec, buf, bufSize, (short *)audioData);
            __android_log_print(ANDROID_LOG_INFO, DEBUG_TAG,"Encoder returned %d bytes of data\n", packetSize);
            nChunckSize += packetSize;
            audioData += frameBytes;
            audioSize -= frameBytes;
            if(NULL != fileWrite){
                fwrite(buf, packetSize, 1, fileWrite);
            }
            else{
                __android_log_print(ANDROID_LOG_ERROR, DEBUG_TAG,"Unable to open file for writting... NULL");
            }
        }
        if(NULL != fileWrite){
            fclose(fileWrite);
        }
        __android_log_print(ANDROID_LOG_INFO, DEBUG_TAG,"----- Done with nChunckSize: %d --- ",nChunckSize);
         __android_log_print(ANDROID_LOG_INFO, DEBUG_TAG,"*****************************");
        wavReadnDisplayHeader(FILE_NAME);
        __android_log_print(ANDROID_LOG_INFO, DEBUG_TAG,"*****************************");
        wavReadnDisplayHeader("/sdcard/Voicemail2.wav");
    }
    

    Header Writing:

    /** Writes WAV headers */
    void WriteWav(FILE *f, long int bytes)
    {
        /* quick and dirty */
        fwrite("RIFF",sizeof(char),4,f);                /*  0-3 */      //RIFF
        PutNum(bytesã8,f,1,4);                       /*  4-7 */      //ChunkSize
        fwrite("WAVEfmt ",sizeof(char),8,f);            /*  8-15 */     //WAVE Header + FMT header
        PutNum(16,f,1,4);                               /* 16-19 */     //Size of the fmt chunk
        PutNum(49,f,1,2);                                /* 20-21 */     //Audio format, 49=libgsm wave, 1=PCM,6=mulaw,7=alaw, 257=IBM Mu-Law, 258=IBM A-Law, 259=ADPCM
        PutNum(1,f,1,2);                                /* 22-23 */     //Number of channels 1=Mono 2=Sterio
        PutNum(8000,f,1,4);                             /* 24-27 */     //Sampling Frequency in Hz 
        PutNum(2*8000,f,1,4);                           /* 28-31 */     //bytes per second /Sample/persec
        PutNum(2,f,1,2);                                /* 32-33 */     // 2=16-bit mono, 4=16-bit stereo 
        PutNum(16,f,1,2);                                /* 34-35 */     // Number of bits per sample
        fwrite("data",sizeof(char),4,f);                /* 36-39 */     
        PutNum(bytes,f,1,4);                            /* 40-43 */     //Sampled data length  
    }
    

    Please help....