Извлечь размеры видео H.264 из потока MPEG-TS с поврежденным SPS
Я пишу преобразователь MPEG-TS в MP4, который в основном работает, поскольку я получаю из него воспроизводимые файлы MP4, которые имеют надлежащие размеры и скорость воспроизведения и так далее.
Тем не менее, я не уверен, как VLC (или любой другой видеопроигрыватель, на котором я тестировал свой вывод) определяет, каковы правильные размеры видео. Значения ширины и высоты, которые я вычисляю из парсинга SPS, являются полным мусором; Я получаю такие вещи, как 16x160 или 32x1529.
Теперь поле avcC в файле MP4 содержит полный исходный модуль SPS, поэтому я вижу две возможности: 1. Мой SPS-анализатор как-то сломан, и игроки MP4 самостоятельно извлекают информацию о ширине, высоте, профиле и уровне самостоятельно. правильно из полного спс. В таком случае, есть ли контрольные примеры, которые я могу использовать для проверки моего анализатора SPS? 2. С моим парсером SPS все в порядке, а данные SPS на самом деле не совсем корректны, и проигрыватели MP4 могут извлекать правильные параметры из видеоданных другими способами. В таком случае, что это значит?
РЕДАКТИРОВАТЬ: Для справки, вот некоторые из SPS, которые я пытаюсь проанализировать, и результаты, которые я получаю:
SPS: 0x674d401feca0c8edff807007088003080031e078c18cb0 pic_width_in_mbs_minus1: 0 pic_height_in_map_units_minus1: 0 frame_cropping_flag: 0 frame_mbs_only_flag: 0 ширина: 16 высота: 32
SPS: 0x6742c015d90a07e84003040030f03c58b920 pic_width_in_mbs_minus1: 1 pic_height_in_map_units_minus1: 159 frame_cropping_flag: 1 (нижнее смещение равно 1, остальные 0) frame_mbs_only_flag: 0 width: 32 width: 32
SPS: 0x676401eacd940b031a100301003032f162d96
pic_width_in_mbs_minus1: 0 pic_height_in_map_units_minus1: 4 frame_cropping_flag: 0 frame_mbs_only_flag: 0 ширина: 16 высота: 160
Мой код парсера довольно большой, чтобы включить его, но он находится на GitHub по адресу https://github.com/gliese1337/HLS.js/blob/master/SPSParser.js
1 ответ
Это все еще должно быть проблемой с вашим парсером SPS:
SPS: 0x674d401feca0c8edff807007088003080031e078c18cb0 pic_width_in_mbs_minus1: 0 pic_height_in_map_units_minus1: 0 frame_cropping_flag: 0 frame_mbs_only_flag: 0 ширина: 16 высота: 32
Sequence Parameter Set
profile_idc 77
constraint_set0_flag 0
constraint_set1_flag 1
constraint_set2_flag 0
constraint_set3_flag 0
level_idc 31
seq_parameter_set_id 0
num_ref_frames 4
gaps_in_frame_num_value_allowed_flag 0
pic_width_in_mbs_minus1 24
pic_height_in_map_units_minus1 13
frame_mbs_only_flag 1
direct_8x8_inference_flag 1
frame_cropping_flag 0
vui_parameters_present_flag 1
Разрешение: 400x224