非Annex-B字节流中NALU后是否允许额外空字节?MP4合规性问询
关于MP4中AVCC块及AVCConfigurationBox额外空字节的标准合规性问题
一、空字节是否符合技术标准?
完全不符合。MP4采用的是AVCC(ISO BMFF封装)格式的H.264,和Annex-B字节流是两种完全不同的封装规范,规则不能混同:
- AVCConfigurationBox(stsd头中):结构是严格定义的,必须按「参数集长度+参数集数据」的顺序依次存放SPS、PPS等,没有预留额外空字节的位置,多余的
00 00 00 00属于无效数据。 - 首个AVCC块中SPS后的空字节:AVCC用长度前缀标识每个NALU的边界,不存在Annex-B里的起始码歧义问题,所以既不需要仿真预防处理,也不允许出现无意义的空字节——你说的Annex-B允许空字节是字节流格式的规则,不适用于MP4的AVCC封装场景。
FFmpeg和VLC不报错只是厂商做了鲁棒性兼容,为了能播放更多非合规文件,不代表这些空字节符合标准。
二、该修改设备代码还是校验代码?
必须修改设备代码。你的Python校验代码如果是严格遵循MP4和H.264的官方规范编写的,那报错是合理的。合规的MP4文件不应该出现这类多余空字节,问题出在设备的生成逻辑上,应该修正设备的封装流程,去掉这些无效的空字节。
内容的提问来源于stack exchange,提问作者unlord
相关产品推荐
相关产品推荐

