You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

提取ISOBMFF格式MP4的moof box时ASCII反转,是否为大端格式?

ISOBMFF格式中MP4 Box的字节序说明

是的,ISOBMFF(MP4所采用的底层格式)明确规定:所有Box的4字节size字段和4字节type字段必须以**大端(Big-Endian)**字节序存储,与运行代码的CPU架构无关——你的Intel Xeon属于小端架构,这就是你遇到ASCII反转问题的核心原因。

你直接用fwrite把内存中的结构体数据写入文件时,小端CPU存储的字节序会被直接输出,而ISOBMFF要求大端,因此出现了字段内容反转的情况。

针对你的代码补充几个关键注意点:

  • 禁止直接通过结构体指针整体写入文件:必须先将size和type等多字节字段转换为大端字节序后再写入。
  • 代码中fp和fp2是两个不同的文件指针,存在笔误风险,需确保写入目标文件句柄正确。
  • moof Box内部的子字段(比如mfhd中的sequence number)同样需要遵循大端字节序要求,不能直接按内存中的小端数据输出。

转换小端到大端的常用方法可以借助系统提供的函数:

#include <arpa/inet.h>

// 将32位小端整数转换为大端
uint32_t big_endian_size = htonl(moof->size);

写入时先输出转换后的big_endian_size,再直接写入moof->type的4个字节(确保内存中type是按'm'->'o'->'o'->'f'的顺序存储,而非反转),最后写入Box的剩余内容。

内容的提问来源于stack exchange,提问作者Kundera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 18:25:20