Когда аудио очередь воспроизводится lpcm, декодированный из ffmpeg, истекшее время аудио-очереди превышает длительность медиа
При воспроизведении данных lpcm, декодированных из ffmpeg с помощью audioqueue, истекшее время, полученное 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;
При воспроизведении с данными, декодированными из AVFoundation, настройка AudioStreamBasicDescription такая же, как указано выше. По моему тесту обнаружил, что AudioTimeStamp.mSampleTime
получен кем-то AudioQueueGetCurrentTime
отличается между ffmpeg и AVFoundation, значение ffmpeg больше, чем AVFoundation. Поэтому я хочу знать, как это происходит и как это исправить? Спасибо!
1 ответ
Здесь ошибка asbd.mSampleRate = 44100
не всегда прав, поэтому иногда результат правильный, а другие неправильные. Тогда вы должны установить asbd.mSampleRate = audioCodecCtx->sample_rate
это всегда хорошо работает!