使用音频队列播放从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.mSampleTime
get byAudioQueueGetCurrentTime
是不同的,ffmpeg的值大于AVFoundation。所以我想知道这是怎么发生的,以及如何解决它?谢谢!