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的邏輯結構

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中的偏移
其結構可以簡單的用下圖來粗略的描述