Проблемы синхронизации при мультиплексировании аудио и видео с помощью libav

У меня есть серия закодированных пакетов, видео H.264 и аудио AAC. По мере их поступления я записываю их в видеофайл, используя av_write_frame.

Учитывая следующую ситуацию подряд

  • 10 секунд видео, затем
  • 10 секунд видео и аудио, затем
  • 10 секунд видео.

Все хорошо мультиплексируется, и при воспроизведении через VLC или QuickTime все выглядит хорошо. Если я воспроизвожу его в проигрывателе Windows Media, звук воспроизводится немедленно.

Кажется, я делаю что-то не так, но проверяя PTS пакетов аудиопотока, они установлены на 10 секунд на основе временной базы аудиопотока.


person Stephen H. Gerstacker    schedule 12.03.2014    source источник
comment
Кажется, что перед реальным звуком могут потребоваться пустые аудиопакеты. Используя аналогичный код на стороне Mac, который использует AVFoundation, результирующий файл имеет начальный аудио PTS в 0, поэтому он предварительно заполняется пустыми аудиопакетами.   -  person Stephen H. Gerstacker    schedule 13.03.2014
comment
Какой контейнер вы использовали? Некоторые мультиплексоры могут обрабатывать этот вариант использования по-разному.   -  person Jack    schedule 21.03.2014
comment
Пробовал мов и мп4. У обоих была одна и та же проблема.   -  person Stephen H. Gerstacker    schedule 27.03.2014


Ответы (1)


Кажется, что лучше всего вводить пустые аудиопакеты в начале потока. Только так будет работать воспроизведение видео в WMP. Каждый игрок обрабатывает потоки по-своему, и это лучший способ обеспечить совместимость между игроками.

person Stephen H. Gerstacker    schedule 21.03.2014