Путаница в формате элементарного потока H264

Я запутался в формате видеопотоков H264. Проще говоря, я прочитал из спецификации ISO и других источников, что блоки NAL H264 ограничены начальным кодом и не содержат информации о длине, И что они не имеют начальные коды и начинаются с 4 байтов (я знаю, что это может варьироваться), что дает длину блока NAL. Чтобы сделать ситуацию еще более запутанной, я просматривал код в Spydroid и, похоже, рассмотреть оба сценария. Есть ли два разных формата, которые я путаю, и если да, то может ли кто-нибудь направить меня к информации, объясняющей эти два.

Задний план

Чтобы дать некоторый фон на случай, если это поможет, я работаю над прямой трансляцией с камер Android. Поток будет либо разделен на устройстве для RTP, либо отправлен в виде необработанных данных MP4 для разделения на сервере. В любом случае поток будет транслироваться, поэтому не будет информации MOOV для поиска аудио- и видеокадров. Я считаю, что многое из проекта понял, но я в основном запутался в том, что я должен видеть в потоке H264. Если длина действительно включена в единицу NAL, это определенно поможет мне.


person PhilH    schedule 15.06.2012    source источник


Ответы (2)


Что касается битового потока H.264. он разделен на блоки NAL, разделенные префиксом начального кода. то есть

startcode_prefix  NALUnit    startcode_prefix  NALUnit .....  

В нем нет информации о длине, потому что это битовый поток. Вы должны искать шаблон стартового кода (0x000001 ИЛИ 0x00000001) в битовом потоке для следующего блока NAL.

Дополнительная информация здесь: Разбор H264 — обнаружение заголовка фрагмента

person puffadder    schedule 15.06.2012
comment
Спасибо. Ваша ссылка на другой вопрос привела меня к другому поиску, где я получил ответ, который я дам здесь. - person PhilH; 16.06.2012

По следующей ссылке есть подтипы H.264. Некоторые из них имеют начальные коды в потоке, а другие имеют поля длиной 1, 2 или 4 байта.

http://msdn.microsoft.com/en-us/library/windows/desktop/dd757808(v=vs.85).aspx

Итак, похоже, мне нужно будет выполнить проверку подтипа, чтобы определить, как анализировать поток.

person PhilH    schedule 16.06.2012