【发布时间】: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 字节(或解析器,或两者),这会让你得到垃圾维度。
-
这是个好主意。我已经编辑了问题以包含示例。