将h264复用为mp4(isobmff格式)时,Endian处理方法

问题描述 投票:0回答:1

如果视频数据复用为mp4文件,视频原始数据-> mdat

典型的 MP4 布局:

[MDAT size in 4 bytes] --> [MDAT header in 4 bytes "m","d","a","t"] then follows NALUs.
[NAL #1 size (4 bytes)] --> [NAL #1 data] --> [NAL #2 size (4 bytes)] --> [NAL #2 data].

但是当我使用 isobmff 库尝试这个时,它需要 Endian 处理方法。
我的 CPU 是 Intel(R) Xeon(R) Gold 6238R CPU @ 2.20GHz。
不仅 ASCII 代码

'm' 'd' 'a' 't' 
更改为
't' 'a' 'd' 'm'
,大小字节也更改为 BigEndian。
经过从小到大的字节序处理后,它就可以工作了。
但是,如果没有 Endian 处理,我无法制作 mp4 mdat 盒。
这样做对吗?

mp4盒子的ASCII码和大小是大端格式吗?

c video mp4 h.264 endianness
1个回答
0
投票

MP4 文件规范来自 MOV(Apple 的格式)。

Apple 的早期硬件是大端字节序,但您的英特尔至强是小端字节序。

因此 MP4 中的大小字段是大端字节序,因此在写入文件之前必须从小端字节序转换为大端字节序。

fourCC 'mdat'(4 个字节“m”、“d”、“a”、“t”)需要按照拼写顺序写入。

有时,库将 fourCC 存储在 uint32_t 中,例如“mdat”,然后 fourCC 可能会颠倒。

© www.soinside.com 2019 - 2024. All rights reserved.