Время композиции (CTS) при упаковке NALU H.264 - PullRequest
7 голосов
/ 14 августа 2011

Аппаратные карты сжатия h.264 обрабатывают NALU из захваченного видео.

Я пытаюсь обернуть NALU в FLV, и у меня почти все получается.

Я не знаю, как заполнитьполе Composition Time в FLV для каждого NALU.

В соответствии со спецификацией FLV, http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf, E.4.3.1.

CompositionTime Смещение времени композиции

См. ИСО 14496-12, 8.15.3 для объяснения времени композиции.Смещение в FLV-файле всегда выражается в миллисекундах

Затем посмотрите на ISO 14496-12,8.15.3 , стр. 24 и 26

обеспечивает смещение между временем декодирования и временем композиции.Поскольку время декодирования должно быть меньше, чем время композиции, смещения выражаются в виде чисел без знака, таких что CT (n) = DT (n) + CTTS (n), где CTTS (n) является (несжатая) запись таблицы для образца n.

Как узнать DT и CTTS в каждом NALU?или как рассчитать CT без DT и CTTS?

Спасибо

Ответы [ 2 ]

7 голосов
/ 23 марта 2014

Для транскодеров MPEG-4 H.264, которые доставляют NALU I-кадра, P-кадра и B-кадра внутри транспорта MPEG-2, результирующие пакетированные элементарные потоки (PES) помечаются метками времени представления (PTS)и временные метки декодера (DTS) в единицах времени, равные 1/90000 секунды.

NALU поступают в порядке меток времени DTS в повторяющемся шаблоне, например

I P B B B P B B B ...  

, где предполагаемый рендеринг воспроизведения

I B B B P B B B P ... 

(Эта транспортная стратегия гарантирует, что оба кадра, которые мосты B-кадров находятся в декодере до обработки B-кадра.)

Для FLV - метка времени (спецификация FLVстр. 69) сообщает, когда кадр должен быть подан в декодер в миллисекундах, что составляет

timestamp = DTS / 90.0

. CompositionTime (спецификация FLV, стр. 72) сообщает средству визуализации, когда следует выполнять («создавать») видеокадр на устройстве отображения в миллисекундах после его поступления в декодер;таким образом, это

compositionTime = (PTS - DTS) / 90.0 

(Поскольку PTS> = DTS, эта дельта никогда не бывает отрицательной.)

2 голосов
/ 03 сентября 2011

Я думаю, что понял CTS.это только для B-кадров.Поскольку B-кадры могут зависеть от того, какие кадры следует декодировать, поэтому CTS означает, когда этот B-кадр может быть декодирован, обычно это означает, что все зависимые кадры получены.

...