Получить PTS из необработанных mdat H264, сгенерированных iOS AVAssetWriter

Я пытаюсь одновременно читать и записывать файл H.264 mov, написанный AVAssetWriter. Мне удалось извлечь отдельные блоки NAL, упаковать их в AVPackets ffmpeg и записать в другой видеоформат с помощью ffmpeg. Это работает, и полученный файл воспроизводится хорошо, за исключением того, что скорость воспроизведения неправильная. Как рассчитать правильные значения PTS/DTS из необработанных данных H.264? Или, может быть, есть какой-то другой способ их получить?

Вот что я пробовал:

  1. Ограничьте минимальную/максимальную частоту кадров захвата до 30 и предположите, что выходной файл будет иметь 30 кадров в секунду. На самом деле его fps всегда меньше значений, которые я установил.И еще, я думаю, что fps не постоянен от пакета к пакету.

  2. Запомнить метку времени представления каждого записанного образца и предположить, что образцы однозначно сопоставляются с NALU, и применяют сохраненную метку времени к выходному пакету. Это не работает.

  3. Установка PTS на 0 или AV_NOPTS_VALUE. Не работает.

Погуглив об этом, я понял, что необработанные данные H.264 обычно не содержат никакой информации о времени. Иногда внутри SEI может быть некоторая информация о времени, но в файлах, которые я использую, ее нет. С другой стороны, есть некоторые приложения, которые делают именно то, что я пытаюсь сделать, поэтому я полагаю, что это каким-то образом возможно.

6
задан kolyuchiy 18 June 2012 в 17:07
поделиться