2014-04-02 3 views
0

Я использую декодер avcodec H264 в своем проекте. Я получаю NAL-модули из сети, склеиваю NAL с одного кадра (добавляется дополнительный заголовок на сетевой уровень) и передается декодеру. Мне было интересно, закодирован ли номер последовательности кадров в блок NAL - это было бы логично, поскольку нам нужна ссылка на фреймы IDR.x264/avcodec: серийный номер кадра из блока NAL

Если эта информация присутствует - как ее можно извлечь?

Сейчас я смотрю спецификацию ITU-T H.264, которую я могу признать довольно сложной. До сих пор я не нашел ответа на свой вопрос.

+1

Я не уверен, что именно вы пытаетесь найти. Если вы пытаетесь выяснить, соответствуют ли разные NAL одному и тому же кадру, вам необходимо прочитать «7.4.1.2.4 Обнаружение первого блока VAL NCL первичного кодированного изображения». Обратите внимание, что тот же frame_num из slice_header недостаточно, чтобы сказать, что NAL соответствуют одному и тому же фрейму. – nobody555

+0

Спасибо. Это был именно вопрос: как я понимаю, что NAL - это один и тот же фрейм? И в каком порядке они должны быть в блоке, переданном декодеру? –

+0

@ nobody555, насколько я вижу - frame_num из заголовка среза отлично соответствует порядковому номеру кадра, и даже если он переполняет каждый MaxFrameNum, это не проблема. Я не буду делать буфер кадров больше этого значения. Также я использую профиль Baseline, поэтому порядок среза не имеет значения, поэтому frame_num должно быть достаточно. Я где-то ошибаюсь? –

ответ

1

Нет. Frame_num недостаточно (потому что он может быть одинаковым для разных кадров, а не из-за переполнения кадра MaxFrameNum). Например, последующие B-кадры могут иметь равный frame_num, но разные pic_order_cnt_lsb. Как я уже сказал, вам нужно прочитать «7.4.1.2.4 Обнаружение первого блока VAL NAL первичного кодированного изображения» из спецификации H.264, чтобы узнать NAL из разных первичных кодированных изображений. И чтобы узнать порядок NAL внутри одной картинки, вы можете проанализировать значение first_mb_in_slice.

+0

Это также верно для базового профиля, были ли у нас только I и P-рамки? –

+1

Да, это возможно, если мы говорим вообще в соответствии с спецификациями H.264. Но вы действительно видите, что такая вещь зависит от реализации кодера. AFAIK x264 будет увеличивать frame_num для каждого P-кадра в таком потоке базовой линии, но если у вас будут последующие IDR-кадры, то они будут иметь равный frame_num (он должен быть принудительно равен нулю), но будет иметь другой idr_pic_id. – nobody555