最近写了个解析MP4的类来解析MP4文件,现在来聊一聊,有不对的地方,请大家指正,谢谢。
说点要注意的地方:
1.首先MP4的数据是网络字节序,也就是按照大端进行存储(高位在低地址),所以我们在解析box的时候,需要做个转换。
类似这样:
uint32_t n_to_uInt(const uint32_t val)
{
return (val >> 24) + ((val & 0xFF0000) >> 8) + ((val & 0xFF00) << 8) + ((val & 0xFF) << 24);
}
uint64_t n_to_uInt64(const uint64_t val)
{
return (val >> 56) + ((val & 0xFF000000000000) >> 40) + ((val & 0xFF0000000000) >> 24) + ((val & 0xFF00000000) >> 8)
+ ((val & 0xFF000000) << 8) + ((val & 0xFF0000) << 24) + ((val & 0xFF00) << 40) + ((val & 0xFF) << 56);
}
2:对于文件比较大的情况,可能需要_fseeki64。
进入正题:
MP4是 由一系列的box组成,有的box是相对独立的,比如ftyp box。有的box 中还包含其他的Box,比如moov Box