НЕТ !!!
Вы должны запустить сложную функцию, чтобы извлечь размеры видео из наборов параметров последовательности.Как это сделать?Ну, во-первых, вы должны написать свой собственный декодер Exp-Golomb или найти его в сети ... в исходном коде live555, где-то есть его, например ...
Затем вы должны получить один кадр SPS.Он имеет NAL=0x67
(NAL - первый байт в кадре H.264), и вы можете найти его как строку в кодировке Base64 в SDP в sprop-parameter-sets
это первая строка Base64 перед первой запятой.Другими строками, разделенными запятыми, являются наборы параметров изображения ... Это один SPS из SDP Z0KAKYiLQDIBL0IAAB1MAAK/IAg=
, вам необходимо декодировать что-то подобное из Base64 в байтовый массив.
Затем необходимо извлечь RAW BYTEПОСЛЕДОВАТЕЛЬНАЯ ЗАГРУЗКА , за которой следует NAL UNIT HEADER в этом байтовом массиве !!!Обычно это один байт, но читайте дальше, чтобы быть уверенным ... RBSP содержит байты, необходимые для запуска функции seq_parameter_set_data( )
.Поэтому вам нужно сначала удалить заголовок NAL UNIT (один или несколько байтов).
Вот эта функция извлекает байты RBSP из NAL UNIT SPS:
Затем, когда у вас есть SPS (байты RBSP), вам нужно выполнить функцию, которая анализирует биты в этом байтовом массиве.Вот функция со всеми проанализированными там параметрами (весь документ можно найти здесь: http://www.itu.int/rec/T-REC-H.264-201003-I/en и его бесплатно):
Там вы можете увидеть некоторые странные вещи ... во-первых, вашРазмеры видео рассчитываются следующим образом:
Width = ((pic_width_in_mbs_minus1 +1)*16) - frame_crop_right_offset*2 - frame_crop_left_offset*2;
Height = ((2 - frame_mbs_only_flag)* (pic_height_in_map_units_minus1 +1) * 16) - (frame_crop_top_offset * 2) - (frame_crop_bottom_offset * 2);
Во-вторых, и самое важное, в столбце DESCRIPTOR этой кодовой таблицы указано, что вы должны сделать, чтобы прочитать параметр жирного текста в первом столбце.Вот что означают значения:
- u (N) - Считать число без знака длиной N бит
- s (N) - Считать число со знаком, длина которого N битов
- ue (v) - Считать число без знака Exp-Golomb (v для переменной длины, поэтому оно равно
ue()
) - se (v) - Считать подписанный номер Exp-Golomb
Здесь вам пригодится ваш Exp-Golomb декодер ...
Итак, реализуйте эту функцию, проанализируйте SPS, и вы получите свои ширину и высоту.Наслаждайтесь ...:)