Я пытаюсь воспроизвести видео с кодировкой vc1 в контейнере matroska.
Для этого я использую ffmpeg av_read_frame
функция и видеодрайвер, который требует AVPacket
данные должны начинаться с заголовка PES.
В AVPacket
только dts
поле действительно, pts
является AV_NOPTS_VALUE
, я пишу dts
значение в заголовок PES вместо pts
,
Видеодрайвер регистрирует постоянное изменение частоты кадров с 23976 до 24000 и наоборот. Видео дергается. Хотя я поместил частоту кадров в заголовок PES (значение 23976 — это то, что дает зондирование ffmpeg), но, видимо, оно меняется в соответствии с точками текущего пакета.
Я пытался смотреть на AVCodecParserContext
«s pts_dts_delta
а также dts_ref_dts_delta
но они из AV_NOPTS_VALUE
, его pts
а также dts
такие же как из AVPacket
Посоветуйте, пожалуйста, как получить правильные значения pts или что делать, чтобы решить эту проблему.
Благодарю.
РЕДАКТИРОВАТЬ:
Я видел в ffplay.c они используют av_frame_get_best_effort_timestamp
но это после декодирования средствами ffmpeg, что я не могу себе позволить.
Задача ещё не решена.
Других решений пока нет …