QuickTime文件格式解析
Peter Lee 2008-06-14
?
一、簡介
QuickTime是Apple公司開發的一套完整的多媒體平臺架構,可以用來進行多種媒體的創建,生產,和分發,并為這一過程提供端到端的支持:包括媒體的實時捕捉,以編程的方式合成媒體,導入和導出現有的媒體,還有編輯和制作,壓縮,分發,以及用戶回放等多個環節。QuickTime文件格式是QuickTime整個架構體系中的一環,非常基礎和重要的一環。QuickTime的多媒體架構應用于Mac OS和Windows系統上,而QuickTime文件格式是平臺無關的,可以應用于各類系統。常見的采用QuickTime文件格式的擴展名有:mov, qt, mp4, m4v, m4a, m4p, m4b等。
?
二、原子
原子是QuickTime用來構建等級數據結構的基本容器。新創建的QuickTime原子就象樹的根。隨后的每個原子都包含在其中并且包含數據和其它原子。如果一個QuickTime原子包含其它原子,就被叫做父原子,包含在其中的原子就叫做葉原子。
1、簡單原子
原子包含一個原子頭,原子頭后面是原子數據。原子頭包含原子的尺寸和類型字段,用于表示原子的字節尺寸和類型信息;它還可能包含一個擴展的尺寸字段,該字段以64位整數的形式給出了一個大原子的尺寸。原子結構如圖1所示。
?
圖1 原子結構圖
?
2、QT原子
原子的特點是:簡單、抽象。QuickTime文件格式中的所有數據及信息都可以用原子和原子之間的嵌套關系來表達。然而,基本原子的缺點是,當應用程序遇到未知的原子類型(atom type)時,將無法確認該原子是否有下一級的子原子,此種情況下,應用程序即使對子原子類型是已知的,也無法進行解析。
QT原子是一種增強了的數據結構,它提供了一種更加通用的存儲格式,并且消除了一些在使用簡單原子時會出現的不明確的地方。QT原子中,根原子atom type項統一設置為“sean”。QT原子在簡單原子的基礎上,增加了原子ID和子原子數目。QT原子的結構如下圖2所示。
?
圖2 QT原子結構圖
?
3、常見的頂層原子類型
·?????????????? 'moov'
·?????????????? 'mdat'
·?????????????? 'free'
·?????????????? 'junk'
·?????????????? 'pnot'
·?????????????? 'skip'
·?????????????? 'wide'
·?????????????? 'pict'
·?????????????? 'ftyp'
·?????????????? 'uuid' : Used by Sony's MSNV brand of MP4
?
?
圖3 QuickTime文件結構示例
三、文件結構實例解析
圖3所示的是,用MovSpot對一個3gp文件分析得到的樹狀結構圖。圖3中,ftyp指示了文件類型信息,mdat包含了媒體數據信息,moov是movie atom,包含了track, video ,audio等一系列的頭信息。圖3 QuickTime文件結構示例 2、Movie AtomMovie atom是非常重要的一個原子,其結構示例如圖4所示,我們可以將圖3的層次圖與圖4進行對照分析。
圖4 movie atom結構示例
?
四、相關資料
1、文檔資料
Quicktime Wiki資料,簡潔明了
http://wiki.multimedia.cx/index.php?title=QuickTime_container
?
Quicktime開發者站點的官方網站,英文資料,可以下載到相應的pdf文檔。
http://developer.apple.com/documentation/QuickTime/QTFF/QTFFPreface/chapter_1_section_1.html
?
Quicktime開發者站點中文站,可以看到中文的資料,不過更新時間很早了2001-03-01,翻譯的也不專業。
http://developer.apple.com.cn/Documentation/QuickTime/QTFF/index.html
?
2、分析工具
MovSpot.exe
http://blog.csdn.net/sunshine1314/archive/2007/09/22/1795739.aspx
?
3、相關源碼
Bento4 MP4 Class Library/SDK
http://bento4.sourceforge.net/
?
?
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/sunshine1314/archive/2008/06/14/2547275.aspx