Застрял в написании очень простого медиаплеера на C с использованием библиотек SDL и ffmpeg. Первоначально следил за теорией на этой странице, чтобы получить представление обо всей программе и использовании библиотек. После написания кода с нуля, благодаря этому руководству и многим другим ресурсам, я, наконец, заставил свой код работать, используя последние библиотеки ffmpeg и SDL (2.0). Но в моем коде отсутствует надлежащий механизм синхронизации (на самом деле ему не хватает механизма синхронизации!).
У меня до сих пор нет четкого представления о том, как синхронизировать аудио и видео вместе, поскольку теория, представленная в ссылке, только частично верна (по крайней мере, когда речь идет об использовании последних библиотек разработчиков).
Например, предложение на этой странице выглядит следующим образом:
Однако ffmpeg переупорядочивает пакеты так, что DTS пакета, обрабатываемого avcodec_decode_video(), всегда будет таким же, как PTS кадра, который он возвращает.
Я использую avcodec_decode_video2(), и DTS пакета определенно не совпадает с точками кадра, который он декодирует (в целом).
Я прочитал этот очень информативный отчет BBC, и он делает полный смысл. У меня есть четкое представление о PTS и DTS. Но значения PTS и DTS, которые ffmpeg использует для пакетов и декодированных кадров, сбивают с толку. Я хотел бы, чтобы была какая-то документация по этому аспекту.
Может ли кто-нибудь объяснить шаги по синхронизации аудио и видео? Мне нужны только шаги. Мне вполне комфортно их реализовывать. Любая помощь приветствуется. Спасибо !
PS: Вот скриншот того, о чем я говорю:
Огромное отрицательное значение, я предполагаю, AV_NOPTS_VALUE.