H264封装为MP4(ISOBMFF)时字节序处理正确性咨询
MP4(ISOBMFF)mdat盒子字节序问题解答
标准规范明确
ISOBMFF(MP4采用的容器格式)对盒子存储有强制要求:
- 盒子的4字节大小字段必须以**大端(Big-Endian)**字节序存储
- 盒子的4字节类型字段是固定ASCII字符,mdat盒子的类型就是
'm' 'd' 'a' 't',无需反转,直接按字符顺序写入即可
场景分析
你在Intel Xeon Gold 6238R(x86架构,天生小端字节序)上使用ISOBMFF库时,需要反转类型字符、转换大小字节序才能生成可用mdat盒子,这说明所用库没有正确处理字节序转换逻辑。x86架构下本地存储是小端,而标准要求大端,正确操作应该是:
- 将本地小端的大小数值转换为大端后写入文件
- 直接写入
mdat四个字符,不需要反转
结论:你的处理方式不正确
你当前的操作不符合ISOBMFF标准,只是刚好适配了所用库的异常行为。严格来说,正确实现必须遵循标准:大小字段转大端,类型字段直接写mdat,不能反转。
内容的提问来源于stack exchange,提问作者Kundera
相关产品推荐
相关产品推荐

