Подтвердить что ты не робот

Что означает этот H264 NAL Header?

0000 0109 1000 0001 6742 0020 e900 800c
3200 0001 68ce 3c80 0000 0001 6588 801a

Насколько я знаю, 0000 01 является стартовым префиксным кодом для идентификации блока NAL. Что означает "09...."? Является ли это байтом типа заголовка?

4b9b3361

Ответ 1

0x000001 - это код префикса запуска NAL (он также может быть 0x00000001, зависит от реализации кодера). 0x09 - 0b00001001, что означает F = 0, NRI = 0, а тип - 0b01001. Этот конкретный тип является разделителем блока доступа. Обратите внимание, что за ним сразу следует другой блок NAL, определяемый 0x67, который является типом NAL 7, который является набором параметров последовательности.

Там также установлен параметр изображения:

00 0001 68...

... и начало ключевого кадра:

0000 0001 65...

Ответ 2

Ключевая ссылка на выяснение того, какой тип NAL вы ищете, - http://www.itu.int/rec/T-REC-H.264-201304-S. В частности, в таблице на стр. 63 (по состоянию на январь 2014 года) перечислены все допустимые типы NAL.

Чтобы выяснить, что вы смотрите, посмотрите на первые 4 байта. Если NAL находится в рамке "Приложение B", то они будут либо 00 00 01, либо 00 00 00 01. Эта последовательность запрещена/подавлена ​​в потоке бит H.264, поэтому, если вы ее видите, вы точно знаете, что вы смотрите на начало NAL. Тип NAL - это 5 младших бит после 1. В коде:

int nalType = p[2] == 1 ? (p[3] & 0x1f) : (p[4] & 0x1f);

Также в J.264 жаргоне IDR означает, что I-кадр и не-IDR означает P или B-кадры.

С приведенной выше информацией мы можем посмотреть вышеописанный поток и увидеть разделитель блока доступа, за которым следуют SPS, PPS и первый I-Frame.

Ответ 3

    0000 0109 1000 0001 6742 0020 e900 800c
    3200 0001 68ce 3c80 0000 0001 6588 801a

-> 000001| 09 (AUD)| 10 | 000001 | 67(SPS) | xxxx (SPS data)
   xx | 000001 | 68 (PPS)| xxxx (PPS data)

AUD, SPS, PPS - тип NALU (единицы абстракции сети) NALU имеет около 31 типа.

09 AUD означает разделитель блока доступа.

Разделитель блоков доступа (AUD). AUD - это дополнительный NALU, который может быть использовать для разграничения кадров в элементарном потоке. Это не требуется (если иное не указано контейнером/протоколом, например, TS), и часто не включаются для экономии места, но это может быть полезно для находит начало кадра без полного анализа каждого NALU.

Подробнее об этом .

У меня также есть question о том, как декодировать поток h264 (в iOS).

Ответ 4

Определяет тип пакета. Формат:

+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI|  Type   |
+---------------+

Вы уверены, что это h.264 NAL заголовок? Из того, что вы предоставили, это не является заголовком с предоставленным вами контекстом.