Когда аудио очередь воспроизводится 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это всегда хорошо работает!

Другие вопросы по тегам