Разбор байтового потока h.264 - PullRequest
4 голосов
/ 03 апреля 2011

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

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

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

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

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

Спасибо

Ответы [ 3 ]

15 голосов
/ 03 апреля 2011

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

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

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

4 голосов
/ 12 августа 2012

На самом деле гораздо лучше и проще (это только мое мнение) читать документацию по кодированию видео 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).Это довольно сложная задача.Процесс демультиплексирования (идет после распаковки видеоданных) также сложен.Вы должны полностью понимать каждый из таких модулей.Удачи.

...