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

标签 video mp4 mpeg mpeg2-ts

我正在编写一个 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 帧裁剪标志:0 帧_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) 帧_mbs_only_flag:0 宽度:32 高度:5118

SPS:0x676401eacd940b031a100301003032f162d96

pic_width_in_mbs_minus1:0 pic_height_in_map_units_minus1:4 帧裁剪标志:0 帧_mbs_only_flag:0 宽度:16 高度:160

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

最佳答案

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

关于video - 从 SPS 损坏的 MPEG-TS 流中获取 H.264 视频尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30137567/

相关文章:

HTML5 视频在 Safari 中不起作用

ffmpeg - 使用 FFMPEG 和 JPEG2000 帧创建 MP4 视频

python - 从python内存中的MPEG(.ts)文件中提取音频,而不将MPEG写入文件

ffmpeg - 使用 ffmpeg 在视频中设置 B 帧

ruby-on-rails - 事件存储视频的 Rails 预览不起作用

c++ - OpenCV 显示以 I420 编码的 avi 文件

objective-c - AVFoundation 重现视频循环

ffmpeg - 如何在 1920x1080 视频中使用 "standard PAL"标志

ios - mp4伪流媒体实现服务端&iOS端

video - 如何在 chrome 中播放 MPEG-TS