当使用音频队列播放从ffmpeg解码的lpcm数据时,AudioQueueGetCurrentTime
获得的运行时间超过了媒体的持续时间。但是,当使用AVFoundation框架解码同一媒体时,经过的时间等于媒体的持续时间,因此,当使用ffmpeg读取媒体而没有解码时,将压缩的媒体数据发送到音频队列时,经过的时间也等于媒体的持续时间。AudioStreamBasicDescription设置如下:
asbd.mSampleRate = 44100;
asbd.mFormatID = kAudioFormatLinearPCM;
asbd.mFormatFlags = kAudioFormatFlagsCanonical;
asbd.mBytesPerPacket = 4;
asbd.mFramesPerPacket = 1;
asbd.mBytesPerFrame = 4;
asbd.mChannelsPerFrame = 2;
asbd.mBitsPerChannel = 16;
asbd.mReserved = 0;
当处理从AudioStreamBasicDescription解码的数据时,AVFoundation的设置与上面的设置相同。通过我的测试发现,由AudioTimeStamp.mSampleTime
得到的AudioQueueGetCurrentTime
值与AVFoundation值是不同的,其值大于AVFoundation值。所以我想知道这是怎么发生的,以及如何解决它?谢谢!
发布于 2012-08-15 03:58:33
这里的错误是asbd.mSampleRate = 44100
并不总是正确的,所以有时结果是正确的,但是其他的结果是错误的。那么您应该设置asbd.mSampleRate = audioCodecCtx->sample_rate
,这总是工作得很好!
https://stackoverflow.com/questions/11966645
复制