Ответ 1
НЕТ!!!
Вы должны запустить сложную функцию для извлечения размеров видео из Sequence Parameter Sets. Как это сделать? Ну сначала вы должны написать свой собственный декодер Exp-Golomb или найти один онлайн... в исходном коде live555 где-то есть один, например...
Затем вы должны получить один кадр SPS. Он имеет NAL=0x67
(NAL - первый байт в кадре H.264), и вы можете найти его как кодированную в Base64 строку в SDP под sprop-parameter-sets
своей первой строкой Base64 перед первой запятой. В других разделенных запятыми строках есть набор параметров изображения... Это один SPS из SDP Z0KAKYiLQDIBL0IAAB1MAAK/IAg=
вам нужно декодировать что-то подобное из Base64 в массив байтов.
Затем вы должны извлечь RAW BYTE SEQUENCE PAYLOAD, за которым следует NAL UNIT HEADER в этом массиве байтов!!! Обычно это один байт, но читайте, чтобы быть уверенным... RBSP содержит байты, необходимые для запуска функции seq_parameter_set_data( )
. Таким образом, вам нужно сначала отключить HEADER NAL UNIT HEADER (один или несколько байтов).
Здесь это функция, которая извлекает байты RBSP из SPS NAL UNIT:
Затем, когда у вас есть 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, и вы получите свою Ширина и Высота. Наслаждайтесь...:)