Извлечь размеры видео 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

Другие вопросы по тегам