2015-05-09 132 views
2

我正在写一个MPEG-TS到MP4转换器,这主要是因为我可以播放具有适当尺寸和播放速度的可播放MP4文件等等。从具有损坏的SPS的MPEG-TS流获取H.264视频尺寸

但是,我不确定VLC(或者我测试过我的输出的任何其他视频播放器)是如何确定视频的正确尺寸。我通过解析SPS来计算的宽度和高度值是全部垃圾;我最终得到了像16x160或32x1529的东西。

现在,MP4文件中的avcC框包含完整的原始SPS单元,所以我看到两种可能性: 1.我的SPS解析器实际上被破坏了,MP4播放器重新提取宽度,高度,轮廓和关于他们自己的的正确信息来自完整的SPS。在那种情况下,我可以使用哪些测试用例来验证我的SPS分析器? 2.我的SPS解析器很好,SPS数据真的很棘手,MP4播放器能够通过其他方式从视频数据中检索正确的参数。在那种情况下,其他手段是什么?

编辑:作为参考,我这里还有一些SPSS软件我试图解析,结果我得到的:

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_minus 1:159 frame_cropping_flag:1(底部偏移为1,其余为0) frame_mbs_only_flag:0 宽度:32 高度:5118

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

我解析器代码是相当大的,包括在这里,但是G上itHub在https://github.com/gliese1337/HLS.js/blob/master/SPSParser.js

+0

我会先检查语法分析器,THI s解释了如何将位流中的值转换为像素尺寸:[获取H264视频流的尺寸](http://stackoverflow.com/a/6477652/868014) –

+0

@RomanR。我通过直接从规范工作来构建SPS分析器,使用该答案中引用的相同表格。如果解析器出现问题,我不认为再次看同一个引用会有帮助,因此想知道是否有可能已知的测试用例可以运行它。 –

+0

为什么不显示您的SPS字节(或解析器,或两者兼而有之),哪些可以获得垃圾尺寸。 –

回答

3

这仍然应该是与你的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

+1

原来是一个偏离一个字节的错误。感谢您将正确答案用作参考。 –