Как проверять H264/AVC ISO/IEC 14496 -15 AVCDecoderConfigurationRecord?

. Некоторая историческая справка :В настоящее время я работаю с Wowza и пытаюсь декодировать AMFPackets , поступающие из IMediaStream . Видеопакеты будут иметь 5-байтовый заголовок -, а первый пакет — это конфигурация кодека.

На данный момент в моей проверке конфигурация кодека соответствует макету ISO/IEC 14496 -15 AVCDecoderConfigurationRecord . Однако у меня возникли проблемы с декодированием устройств SPS и PPS .

Пакет конфигурации кодека, включая 5-байтовый заголовок -:

17 00 00 00 00 01 4D 00 15 03 01 00 2F 67 4D 40 15 96 52 02 83 F6 02 A1 00 00 03 00 01 00 00 03 00 28 E0 60 03 0D 40 00 49 3E 7F 18 E3 03 00 18 6A 00 02 49 F3 F8 C7 0E D0 B1 68 90 01 00 04 68 EB 73 52

. Flash/Wowza -первым является заголовок:

17 00 00 00 00

  • 17 = 10111 = Кадр H.264 K
  • 00 = 0 = пакет конфигурации кодека
  • 000000 = 0 = время запуска 0

Далее следует AVCDecoderConfigurationRecord (hex = decimal):

  • Версия конфигурации :01 = 1
  • AVCProfileIndication :4D = 77 (Основной)
  • профиль _совместимость :00 = 0
  • AVCMelevelIndication :15 = 21 (2,1)
  • 6 бит зарезервировано + lengthSizeMinusOne :03 = 00000011 = 3 (4 байта)
  • 3 зарезервированных бита + numOfSequenceParameterSets :01 = 0001 = 1
  • sequenceParameterSetLength :002F = (47 байт)
  • (Запись SPS длиной 47 байт)
  • numOfPictureParameterSets :01 = 1
  • pictureParameterSetLength :0004 = (4 байта)
  • (Запись PPS длиной 4 байта)
  • (конец)

Запись SPS (47 байт):

67 4D 40 15 96 52 02 83 F6 02 A1 00 00 03 00 01 00 00 03 00 28 E0 60 03 0D 40 00 49 3E 7F 18 E3 03 00 18 6A 00 02 49 F3 F8 C7 0E D0 B1 68 90

Предположим, что это блок NAL, содержащий тип SPS : (. Используя ITU -T H.264 06/2011 7.3.1 Синтаксис блока NAL)

  • Первый байт :67 = 1100111
  • запрещено _ноль _бит :1 (К сожалению, запрещенный бит 0 установлен в 1?)
  • нал _исх _идк :2
  • нал _блок _тип :0111 = 7 (СПС)

Предполагая, что полезная нагрузка SPS следует за: (Используя ITU -T H.264 06/2011 7.3.2.1.1 Синтаксис данных набора параметров последовательности)

  • профиль _idc :4D=77 (Основной, соответствует)
  • ограничения + 2 зарезервированных бита (равно 0 ):40 = 1000000 (Выглядит нормально)
  • уровень _idc :15 (2.1, соответствует)

Предполагая, что это только SPS: (Используя ITU -TH.264 06/2011 7.3.2.1.1 Синтаксис данных набора параметров последовательности)

  • profile _idc :67 = 103 (Я думаю, это должно быть 77, как AVCProfileIndication?)
  • ограничения + 2 зарезервированных бита (равно 0 ):4D = 1001101 (Угу, установлен зарезервированный бит?)
  • level _idc :77 (Разве это не должно быть 21, как AVCMLevelIndication?)

Похоже, что это бывший заголовок блока NAL + запись SPS, и я сомневаюсь, что это неверные данные, потому что каждый захваченный пакет конфигурации одинаков, но что меня сбивает с толку, так это почему запрещенный бит 0 установлен в 1?

Спасибо

8
задан Rob Olmos 23 June 2012 в 19:55
поделиться