从具有损坏的SPS的MPEG-TS流中获取H.264视频尺寸

时间:2015-05-09 08:05:50

标签: video mp4 mpeg mpeg2-ts

我正在为MP4 transmuxer写一个MPEG-TS,它主要是在我从其中获得具有适当尺寸和播放速度等的可播放MP4文件的情况下工作。

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

现在,MP4文件中的avcC框包含完整的原始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 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

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

1 个答案:

答案 0 :(得分: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 width:16 height: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