Я пишу преобразователь MPEG-TS в MP4, который в основном работает, поскольку я получаю из него воспроизводимые файлы MP4, которые имеют правильные размеры, скорость воспроизведения и так далее.
Однако я не уверен, как VLC (или любой другой видеоплеер, на котором я тестировал свой вывод) выясняет, каковы правильные размеры для видео. Значения ширины и высоты, которые я вычисляю при анализе SPS, являются полным мусором; Я получаю такие вещи, как 16x160 или 32x1529.
Теперь блок avcC в файле MP4 содержит полную исходную единицу SPS, поэтому я вижу две возможности: 1. Мой парсер SPS действительно каким-то образом сломан, и проигрыватели MP4 самостоятельно повторно извлекают информацию о ширине, высоте, профиле и уровне. правильно из полного SPS. В таком случае, есть ли тестовые примеры, которые я могу использовать для проверки моего синтаксического анализатора 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
СПС: 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