Newest 'ffmpeg' Questions - Stack Overflow
Les articles publiés sur le site
-
error:initializer element is not constant [closed]
21 novembre 2011, par lqfI have downloaded ffmpeg's source code from 'www.ffmpeg.org' and created am empty project with ubuntu.Then I'm copied and added the ffmpeg's source code to the project.There are some errors when I compile it.
The errors are:xxx error:initializer element is not constant xxx error:(near initializer for 'ff_eightbps_decoder.long_name') and appeared at ".long_name = NULL_IF_CONFIG_SMALL("QuickTime 8BPS video"),"
-
How to convert .mov videos to iPhone playable mp4 videos [migrated]
21 novembre 2011, par Rinto GeorgeI am trying to convert .mov videos to mp4(should be playable in iPhone) using ffmpeg.I am using Linux CLI. I have tried the following command:
-i source.MOV -s qvga -b 384k -vcodec libx264 -r 23.976 -acodec libfaac -ac 2 -ar 44100 -ab 64k -vpre baseline -crf 22 -deinterlace -o output.mp4
I get the output
ffmpeg: unrecognized option '-o'
-
How to encode VP6 codec in ffmpeg ? [migrated]
20 novembre 2011, par userffmpegCan anyone tell me if there is a way to encode VP6 codec in ffmpeg? I used libvpx only to find out that it encodes using VP8...
-
Can't record audio with ffmpeg linux
20 novembre 2011, par FGravitonI'm trying to do a screencast with ffmpeg on OpenSUSE but the audio isn't working :
ffmpeg -f oss -i /dev/audio -f x11grab -s $SCREEN -r 24 -b 100k -bf 2 -g 300 -i :0.0 -ar 22050 -ab 128k -acodec libmp3lame -vcodec libxvid -aspect 1.6 -sameq out.avi
this one shows me that /dev/audio isn't there !!
Any pointers ?
Thanks Community,
-
Setting up audio queue for ffmpeg rtsp stream playing
20 novembre 2011, par illewI'm working on an rtsp streaming(AAC format) client for iOS using ffmpeg. Right now I can only say my app is workable, but the streaming sound is very noisy and even a little distorted, far worse than when it's played by vlc or mplayer.
The stream is read by av_read_frame(), decoded by avcodec_decode_audio3(). Then I just send the decoded raw audio to Audio Queue.
When decoding a local aac file with my app, the sound seemed not so noisy at all. I know initial encoding would dramatically affect the result. However at least I should try to have it sounded like other streaming clients...
Many parts in my implementation/modification actually came from try and error. I believe I'm doing something wrong in setting up Audio Queue, and the callback function for filling Audio Buffer.
Any hints, suggestions or help are greatly appreciated.
// --info of test materials dumped by av_dump_format() --
Metadata: title : /demo/test.3gp Duration: 00:00:30.11, start: 0.000000, bitrate: N/A Stream #0:0: Audio: aac, 32000 Hz, stereo, s16 aac Advanced Audio Coding
// -- the Audio Queue setup procedure --
- (void) startPlayback { OSStatus err = 0; if(playState.playing) return; playState.started = false; if(!playState.queue) { UInt32 bufferSize; playState.format.mSampleRate = _av->audio.sample_rate; playState.format.mFormatID = kAudioFormatLinearPCM; playState.format.mFormatFlags = kAudioFormatFlagsCanonical; playState.format.mChannelsPerFrame = _av->audio.channels_per_frame; playState.format.mBytesPerPacket = sizeof(AudioSampleType) *_av->audio.channels_per_frame; playState.format.mBytesPerFrame = sizeof(AudioSampleType) *_av->audio.channels_per_frame; playState.format.mBitsPerChannel = 8 * sizeof(AudioSampleType); playState.format.mFramesPerPacket = 1; playState.format.mReserved = 0; pauseStart = 0; DeriveBufferSize(playState.format,playState.format.mBytesPerPacket,BUFFER_DURATION,&bufferSize,&numPacketsToRead); err= AudioQueueNewOutput(&playState.format, aqCallback, &playState, NULL, kCFRunLoopCommonModes, 0, &playState.queue); if(err != 0) { printf("AQHandler.m startPlayback: Error creating new AudioQueue: %d \n", (int)err); } for(int i = 0 ; i < NUM_BUFFERS ; i ++) { err = AudioQueueAllocateBufferWithPacketDescriptions(playState.queue, bufferSize, numPacketsToRead , &playState.buffers[i]); if(err != 0) printf("AQHandler.m startPlayback: Error allocating buffer %d", i); fillAudioBuffer(&playState,playState.queue, playState.buffers[i]); } } startTime = mu_currentTimeInMicros(); err=AudioQueueStart(playState.queue, NULL); if(err) { char sErr[4]; printf("AQHandler.m startPlayback: Could not start queue %ld %s.", err, FormatError(sErr,err)); playState.playing = NO; } else { AudioSessionSetActive(true); playState.playing = YES; } }
// -- callback for filling audio buffer --
static int ct = 0; static void fillAudioBuffer(void *info,AudioQueueRef queue, AudioQueueBufferRef buffer) { int lengthCopied = INT32_MAX; int dts= 0; int isDone = 0; buffer->mAudioDataByteSize = 0; buffer->mPacketDescriptionCount = 0; OSStatus err = 0; AudioTimeStamp bufferStartTime; AudioQueueGetCurrentTime(queue, NULL, &bufferStartTime, NULL); PlayState *ps = (PlayState *)info; if (!ps->started) ps->started = true; while(buffer->mPacketDescriptionCount < numPacketsToRead && lengthCopied > 0) { lengthCopied = getNextAudio(_av, buffer->mAudioDataBytesCapacity-buffer->mAudioDataByteSize, (uint8_t*)buffer->mAudioData+buffeg->mAudioDataByteSize, &dts,&isDone); ct+= lengthCopied; if(lengthCopied < 0 || isDone) { printf("nothing to read....\n\n"); PlayState *ps = (PlayState *)info; ps->finished = true; ps->started = false; break; } if(aqStartDts < 0) aqStartDts = dts; if(buffer->mPacketDescriptionCount ==0) { bufferStartTime.mFlags = kAudioTimeStampSampleTimeValid; bufferStartTime.mSampleTime = (Float64)(dts-aqStartDts);//* _av->audio.frame_size; if (bufferStartTime.mSampleTime <0 ) bufferStartTime.mSampleTime = 0; printf("AQHandler.m fillAudioBuffer: DTS for %x: %lf time base: %lf StartDTS: %d\n", (unsigned int)buffer, bufferStartTime.mSampleTime, _av->audio.time_base, aqStartDts); } buffer->mPacketDescriptions[buffer->mPacketDescriptionCount].mStartOffset = buffer->mAudioDataByteSize; buffer->mPacketDescriptions[buffer->mPacketDescriptionCount].mDataByteSize = lengthCopied; buffer->mPacketDescriptions[buffer->mPacketDescriptionCount].mVariableFramesInPacket = 0; buffer->mPacketDescriptionCount++; buffer->mAudioDataByteSize += lengthCopied; } int audioBufferCount, audioBufferTotal, videoBufferCount, videoBufferTotal; bufferCheck(_av,&videoBufferCount, &videoBufferTotal, &audioBufferCount, &audioBufferTotal); if(buffer->mAudioDataByteSize) { err = AudioQueueEnqueueBufferWithParameters(queue, buffer, 0, NULL, 0, 0, 0, NULL, &bufferStartTime, NULL); if(err) { char sErr[10]; printf("AQHandler.m fillAudioBuffer: Could not enqueue buffer 0x%x: %d %s.", buffer, err, FormatError(sErr, err)); } } } int getNextAudio(video_data_t* vInst, int maxlength, uint8_t* buf, int* pts, int* isDone) { struct video_context_t *ctx = vInst->context; int datalength = 0; while(ctx->audio_ring.lock || (ctx->audio_ring.count <= 0 && ((ctx->play_state & STATE_DIE) != STATE_DIE))) { if (ctx->play_state & STATE_EOF) return -1; usleep(100); } *pts = 0; ctx->audio_ring.lock = kLocked; if(ctx->audio_ring.count>0 && maxlength > ctx->audio_buffer[ctx->audio_ring.read].size) { memcpy(buf, ctx->audio_buffer[ctx->audio_ring.read].data,ctx->audio_buffer[ctx->audio_ring.read].size); *pts = ctx->audio_buffer[ctx->audio_ring.read].pts; datalength = ctx->audio_buffer[ctx->audio_ring.read].size; ctx->audio_ring.read++; ctx->audio_ring.read %= ABUF_SIZE; ctx->audio_ring.count--; } ctx->audio_ring.lock = kUnlocked; if((ctx->play_state & STATE_EOF) == STATE_EOF && ctx->audio_ring.count == 0) *isDone = 1; return datalength; }