Ios 当audioqueue播放从ffmpeg解码的lpcm时,音频队列经过的时间超过了媒体的持续时间
使用audioqueue播放从ffmpeg解码的lpcm数据时,Ios 当audioqueue播放从ffmpeg解码的lpcm时,音频队列经过的时间超过了媒体的持续时间,ios,audio,ffmpeg,pcm,audioqueueservices,Ios,Audio,Ffmpeg,Pcm,Audioqueueservices,使用audioqueue播放从ffmpeg解码的lpcm数据时,AudioQueueGetCurrentTime获得的运行时间超过了媒体的持续时间。但当使用AVFoundation framework解码同一媒体时,经过的时间等于媒体的持续时间,因此当使用ffmpeg读取未解码的媒体,然后将压缩的媒体数据发送到audioqueue时,经过的时间也等于媒体的持续时间。音频流基本描述设置如下: asbd.mSampleRate = 44100; asbd.mFormatID = kA
AudioQueueGetCurrentTime
获得的运行时间超过了媒体的持续时间。但当使用AVFoundation framework解码同一媒体时,经过的时间等于媒体的持续时间,因此当使用ffmpeg读取未解码的媒体,然后将压缩的媒体数据发送到audioqueue时,经过的时间也等于媒体的持续时间。音频流基本描述设置如下:
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通过AudioQueueGetCurrentTime
获得的AudioTimeStamp.mSampleTime
不同,ffmpeg的值大于AVFoundation。所以我想知道这是怎么发生的,以及如何修复它?
谢谢 这里的错误是
asbd.mSampleRate=44100
并不总是正确的,因此有时结果是正确的,但其他结果是错误的。然后您应该设置asbd.mSampleRate=audioCodecCtx->sample\u rate
,这总是很有效的