Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当audioqueue播放从ffmpeg解码的lpcm时,音频队列经过的时间超过了媒体的持续时间_Ios_Audio_Ffmpeg_Pcm_Audioqueueservices - Fatal编程技术网

Ios 当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

使用audioqueue播放从ffmpeg解码的lpcm数据时,
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
,这总是很有效的