Newest 'ffmpeg' Questions - Stack Overflow
Les articles publiés sur le site
-
ffmpeg to transcode streaming video and storage
8 septembre 2011, par icarus74Examples 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 user924702av_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 WhitakerI 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 Psicopathsomeone 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 user924702I 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....