【问题标题】:Fetch H.264 video dimensions from MPEG-TS stream with corrupted SPS从 SPS 损坏的 MPEG-TS 流中获取 H.264 视频尺寸
【发布时间】:2015-05-09 08:05:50
【问题描述】:

我正在编写一个 MPEG-TS 到 MP4 转换器,主要是因为我可以从中获得可播放的 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

我的解析器代码相当大,无法包含在此处,但位于 GitHub 上的 https://github.com/gliese1337/HLS.js/blob/master/SPSParser.js

【问题讨论】:

  • 我会先检查解析器,这解释了如何将比特流中的值转换为像素尺寸:Fetching the dimensions of a H264Video stream
  • @RomanR。我使用该答案中引用的相同表直接从规范中构建了 SPS 解析器。如果解析器有问题,我认为再次查看相同的引用不会有帮助,因此想知道是否有已知的测试用例可以运行它。
  • 为什么不显示你的 SPS 字节(或解析器,或两者),这会让你得到垃圾维度。
  • 这是个好主意。我已经编辑了问题以包含示例。

标签: video mp4 mpeg mpeg2-ts


【解决方案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

【讨论】:

  • 原来是一个字节错误。感谢您作为参考的正确答案。
猜你喜欢
  • 2010-12-15
  • 2017-08-21
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-09
  • 2014-07-24
  • 2012-04-27
相关资源
最近更新 更多