【发布时间】:2010-04-12 21:06:31
【问题描述】:
我正处于为 mp4 文件特别是 iTunes AAC 文件开发标签编辑器的早期阶段。在做了一些窥探之后,似乎文件的结构并不像我最初想象的那么复杂,并且构建在一种类似以下的树中
4 字节 [Atom 长度] 4 字节 [Atom 名称] X 字节 [Atom 数据]一个原子的数据与长度一样大,可以包含数据(信息)或另一个原子。我想要解决的是如何确定数据是信息还是实际原子。任何见解将不胜感激。
【问题讨论】:
我正处于为 mp4 文件特别是 iTunes AAC 文件开发标签编辑器的早期阶段。在做了一些窥探之后,似乎文件的结构并不像我最初想象的那么复杂,并且构建在一种类似以下的树中
4 字节 [Atom 长度] 4 字节 [Atom 名称] X 字节 [Atom 数据]一个原子的数据与长度一样大,可以包含数据(信息)或另一个原子。我想要解决的是如何确定数据是信息还是实际原子。任何见解将不胜感激。
【问题讨论】:
经过大量的窥探,似乎确定一个节点是否导致数据或另一个节点的唯一方法是了解数据结构。因为我只对包含的标签感兴趣,所以结构很容易弄清楚。所有标签都包含在以下层次结构中:
moov.udta.meta.ilst
当深入研究 ilst 节点时,每个标签都表示为一个子原子,其名称决定了它包含的数据。至于实际数据,每个子原子都有一个自己的子原子,其中包含实际信息和一个标志,说明它是什么类型的信息,例如文本或数字,所以总而言之,它看起来像这样:
moov.udta.meta.ilst.[atom size][atom name].[data]
当然,这仍然存在存储在 uuid 原子节点中的自制标签的问题,索尼等公司使用这些标签向文件中添加更多信息。我想 uuid 中的每个孩子都以与 ilst 相同的方式存储其孩子,但我不能确定。
【讨论】: