Парсинг потока байтов h.264

Входные данные представляют собой массив байтов, представляющий кадр h.264. Кадр состоит из одного фрагмента (не мультифрагментного кадра).

Итак, как я понял, я могу справиться с этим фреймом, как со слайсом. Слайс имеет заголовок, а данные слайса - макроблоки, каждый макроблок со своим заголовком.

Поэтому мне нужно разобрать этот массив байтов, чтобы извлечь номер кадра, тип кадра, коэффициент квантования (как я понял, у каждого макроблока есть свой коэффициент? или я ошибаюсь?)

Не могли бы Вы мне подсказать, где я могу получить более подробную информацию о разборе байтов кадра h.264.

(На самом деле я читал стандарт, но он не был очень конкретным, и я потерялся.)

Спасибо


person stemm    schedule 03.04.2011    source источник
comment
Входные данные представляют собой массив байтов, представляющий кадр h.264. Кадр состоит из одного фрагмента (не мультифрагментного кадра). (это ограничения для моей проблемы)   -  person stemm    schedule 03.04.2011
comment
Попробуйте посмотреть ISO/IEC 14496-15.   -  person VitalyVal    schedule 03.04.2011
comment
Что такое h.264m? Я имею в виду - является ли h.264m расширением H.264?   -  person anatolyg    schedule 03.04.2011
comment
Ой... ошибся ) я имею в виду h.264   -  person stemm    schedule 03.04.2011


Ответы (3)


Стандарт H.264 немного сложно читать, поэтому вот несколько советов.

  • Прочтите Приложение Б; убедитесь, что ваш ввод начинается со стартового кода
  • Прочтите раздел 9.1: он понадобится вам для всего следующего
  • Заголовок среза описан в разделе 7.3.3.
  • «Номер кадра» явно не закодирован в заголовке слайса; frame_num близко к тому, что вам, вероятно, нужно.
  • «Тип фрейма», вероятно, соответствует slice_type (второе значение в заголовке слайса, поэтому его проще всего разобрать; вам определенно следует начать с него)
  • "Коэффициент квантования" - вы имеете в виду "параметр квантования"? Если да, будьте готовы написать полный парсер H.264 (или повторно использовать существующий). Посмотрите раздел 9.3, чтобы получить представление о сложности парсера H.264.
person anatolyg    schedule 03.04.2011

Стандарт очень тяжело читать. Вы можете попытаться проанализировать исходный код существующего программного обеспечения для декодирования видеопотока H.264, такого как ffmpeg, с его C (C99 ) библиотеки. Например, функция avcodec_decode_video2 задокументирована здесь. Вы можете получить полный рабочий C (открыть файл, получить поток H.264, перебрать кадры, выгрузить информацию, получить цветовое пространство, сохранить кадры как необработанные изображения PPM и т. д.) здесь. В качестве альтернативы есть отличный "Стандарт расширенного сжатия видео H.264" книга, объясняющая стандарт на "человеческом языке". Другой вариант — попробовать программное обеспечение Elecard StreamEye Pro (есть является пробной версией), которая может дать вам дополнительную (визуальную) перспективу.

person Grzegorz Szpetkowski    schedule 03.04.2011

На самом деле гораздо лучше и проще (это только мое мнение) читать документацию по кодированию видео H.264. ffmpeg — очень хорошая библиотека, но она содержит много оптимизированного кода. Лучше посмотреть эталонную реализацию кодека H.264 и официальную документацию. http://iphome.hhi.de/suehring/tml/download/ – это является ссылкой на реализацию кодека JM. Попробуйте разделить уровни процесса декодирования, такие как транспортный уровень, который содержит блоки NAL (SPS, PPS, SEI, IDR, SLICE и т. д.). Затем вам нужно реализовать движок VLC (в основном коды exp-Golomb диапазона 0). Затем очень сложный и мощный кодек под названием CABAC (Context Adaptive Arithmetic Binary Codec). Это довольно сложная задача. Процесс демультиплексирования (идет после распаковки видеоданных) также сложен. Вам необходимо полностью разобраться в каждом из таких модулей. Удачи.

person t0k3n1z3r    schedule 12.08.2012