0

使用音频队列播放从ffmpeg解码的lpcm数据时,经过的时间AudioQueueGetCurrentTime超过了媒体的持续时间。但是当用AVFoundation框架解码相同的媒体时,经过的时间等于媒体的持续时间,所以当ffmpeg在没有解码的情况下读取媒体,然后将压缩的媒体数据发送到audioqueue,经过的时间也等于媒体的持续时间。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;

播放从 AVFoundation 解码的数据时,AudioStreamBasicDescription的设置同上。通过我的测试发现ffmpeg和AVFoundation的AudioTimeStamp.mSampleTimeget byAudioQueueGetCurrentTime是不同的,ffmpeg的值大于AVFoundation。所以我想知道这是怎么发生的,以及如何解决它?谢谢!

4

1 回答 1

0

这里的错误asbd.mSampleRate = 44100并不总是正确的,所以有时结果是正确的,但其他人是错误的。然后你应该设置asbd.mSampleRate = audioCodecCtx->sample_rate,这总是很好用!

于 2012-08-15T11:58:33.433 回答