MXF文件结构浅析
MXF是英文Material eXchange Format(素材交换格式)的缩语。MXF是SMPTE(美国电影与电视工程师学会)组织定义的一种专业音视频媒体文件格式。MXF主要应用于影视行业媒体制作、编辑、发行和存储等环节。SMPTE为其定义的标准包括:SMPTE - 377M、SMPTE - EG41、SMPTE - EG42等,并不断进行更新和完善。它是一个外壳格式 而不是压缩格式, 所以并不能保证每一款MXF文件 都能被任何一种解码器识别。
MXF标准并非一成不变,一直在发展。SMPTE中MXF相关标准已经有几十个文档,并且仍然在补充增加,SMPTE定义的只是MXF框架和一般原则,具体实现由各厂商自行完成,各大厂商自己实现的MXF,往往在新产品中也会发生一些变化。
1.MXF文件基本结构
MXF文件也可包含一个可选的索引表(Index Table),该索引表可用于将基于采样的索引(如时码)快速换算到对应的要素容器在<spanlang="en-us>">MXF文件中的偏移地址,以实现视音频的快速预览和定位。该索引表可分段存储,可位于基本数据段之前或之后,也可分插到基本数据段中间。
2.MXF底层数据结构
MXF文件的所有数据都采用Key-Length-Value(KLV)进行编码以获得格式的灵活性和可扩展性,KLV编码标准定义在SMPTE 336M中。实际上MXF文件就是若干连续KLV数据包的序列(除了可选的RUN-IN包)。
- Key:16字节的标识符。
- Length:数据(Value域)长度。BER(basic encoding rules )编码方式,如83 00 00 88。
它使用可变长的字节来表示非常宽的长度范围,该域总是按MSB(高字节优先)编码,如果第一个字节的bit7为0,那么低7位代表了0~127范围的长度,如果bit7为1,那么低7位代表长度域的字节个数。
- Value:KLV单元中包含的数据
3.MXF的逻辑结构
![](https://images2017.cnblogs.com/blog/708332/201709/708332-20170912121110875-1002868484.png)
4.MXF文件分析
4.1.首先是文件header分区的partition信息。
4.2.字典,指明了16字节Key到2字节Tag的映射关系
4.3.preface:相当于MXF文件的序言,指明了Source Package 和Material Package的UID(通过ContentStorage包含)
4.4.contentstorage :指明了 SourcePackage(FilePackage)和MaterialPackage以及EssenceContainerData的UID
4.5.EssenceContainerData:将素材容器的BodySID和相应索引表的IndexSID关联起来,并指明了FilePackage的UID
4.5. MaterialPackage:素材包,它里面的SourceClip通过UUID引用到了SourcePackage里的某个Track
链接的SourceTrack
BodyPartition里的Essence
4.6.EssenceDescriptor:描述了SourceTrack里面的Essence的信息
4.7.IndexTab:记录每帧在自己所属的Essence中的偏移
其结构可以简单的用下图来粗略的描述