MKV文件解析實例

////////EBML頭//////////
   1A 45 DF A3 A3

// EBMLVersion EBML編碼器版本號
   42 86     // ID
   81         // 長度
   01        // 值
// EBMLReadVersion EBML解析器版本號
   42 F7    // ID
   81        // 長度
   01         // 值
// EBMLMaxIDLength EBML元素ID號的最長長度(多少字節),在MATROSKA文件中最長爲4字節
   42 F2    // ID
   81        // 長度
   01        // 值    
// EBMLMAXSizeLength EBML元素最長長度(多少字節)
   42 F3     // ID
   81         // 長度
   08         // 值
// DocTypes EBML文件中的內容類型,MATROSKA文件爲"matroska"            
   42 82     // ID
   88         // 長度
   6D 61 74 72 6F 73 6B 61    // 值
// DocTypeVersion EBML文件包含數據的編碼器版本號            
   42 87     // ID
   81         // 長度
   02         // 值
// DocTypeReadVersion EBML文件包含數據的解析器版本號        
   42 85    // ID
   81         // 長度
   02        // 值

////////Segment////////
   18 53 80 67 01 00 00 00 00 09 3B 0F

// SeekHead 指向SEGMENT子素的索引信息,可以指向其它的SeekHead
// 如果Cluster元素中的BlockGroup和SimpleBlock子元素在其尾部,
// 那麼可以不用SeekHead,不然的話,文件的幀數據地址定位將很複雜
   11 4D 9B 74     // ID
   AE         // 長度

// Seek 包含了一個Segment的子元素的ID號和它的具體位置
   4D BB                 // ID
   8C                     // 長度
// SeekID SegmentInfo的ID號
   53 AB                 // ID
   84                     // 長度
   15 49 A9 66
// SeekPosition 對應SeekID的元素的位置(相對於Segment數據首地址)
     53 AC                 // ID
   82                     // 長度
   10 03

// Seek 包含了一個Segment的子元素的ID號和它的具體位置
   4D BB                 // ID
   8C                     // 長度
// SeekID Tracks的ID號
     53 AB                 // ID
   84                     // 長度
   16 54 AE 6B
// SeekPosition 對應SeekID的元素的位置(相對於Segment數據首地址)
   53 AC                 // ID
   82                        // 長度
   10 9A         
   
// Seek 包含了一個Segment的子元素的ID號和它的具體位置
   4D BB                 // ID
   8D                        // 長度
// SeekID Cues的ID號
   53 AB                 // ID
   84                     // 長度
   1C 53 BB 6B
// SeekPosition 對應SeekID的元素的位置(相對於Segment數據首地址)
   53 AC                 // ID
   83                     // 長度
   09 3A 8D
   
//??
EC
4F CD

// EBMLVOID 預留空間

// SegmentInfo 包括了SEGMENT元素的信息,如UID,標題等
15 49 A9 66         // ID
40 91                     // 長度
// TimecodeScale 每個時間碼都通過和此值相乘來得到具體時間(微秒單位),但不是 所有的時間碼都這樣
2A D7 B1                // ID
83                             // 長度
0F 42 40                 
// MuxingApp 生成此文件的庫名稱,如”libMatroska-0.7.0”,在發生問題時可以參考
4D 80                     // ID
A3                            // 長度
6C 69 62 65 62 6D 6C 20 76 31 2E 32 2E 33 20 2B
20 6C 69 62 6D 61 74 72 6F 73 6B 61 20 76 31 2E
33 2E 30
// WritingApp 生成此文件的程序名稱,如”mkvmerge 0.8.1”
57 41                     // ID
BC                             // 長度
6D 6B 76 6D 65 72 67 65 20 76 35 2E 36 2E 30 20
28 27 4B 65 6E 79 61 20 4B 61 6E 65 27 29 20 62
75 69 6C 74 20 6F 6E 20 4D 61 79 20 32 37 20 32
30 31 32 20 31 36 3A 34 34 3A 30 34
// Duration 此Segment的總回放時間,將其乘以TimecodeScale來得出具體時間(微秒單位)
44 89                     // ID
84                             // 長度
47 22 80 00
// DateUTC 生成此文件的時間,從2001.01.01 0:00:00 GMT+0h開始計算
44 61
88
05 28 37 EF 41 E0 5C 00
// SegmentUID 表示Segment的128位ID號,可以被其它的文件引用
73 A4                     // ID
90                             // 長度
A2 A7 C8 0F 28 7D 58 B7 83 90 BF 25 9A E2 07 9D


// Tracks 描述了包含在Cluster中的數據軌道信息,可以在文件生成多個備份。
// 如果沒有Cluster元素,Tracks元素也可以不存在。
16 54 AE 6B            // ID
FA                            // 長度

// TrackEntry
AE
F8
// TrackNumber 軌道的序列號,不可以爲0,將被Cluster的子元素Block和SimpleBlock使用
D7
81
01
// TrackUID 軌道的ID號,不可以爲0
73 C5
84
A9 67 83 84
// TrackType 軌道的類型,如視頻,音頻,字幕
83
81
01
// FlagLacing 是否包括了捆綁數據塊(表示在一個數據塊中包含多幀 lacing block)
9C
81
00
// MinCache 在播放時必須提供多少幀的緩存區,比如當MPEG4幀以其編碼順序來播放時使用
6D E7
81
01
// CodecID 軌道使用的編碼類型ID
86
8F
56 5F 4D 50 45 47 34 2F 49 53 4F 2F 41 56 43
// DefaultDuration 表示一幀持續了多少微秒。
// 當沒有Duration元素或使用捆綁(lacing)方式時將使用此值。
// 如果值爲0表示此軌道的幀的持續時間不定。(如Vorbis 音頻)。
// 使用此值將使文件的定位非常容易。
23 E3 83
84
05 F5 E1 00
// Language 軌道使用的語言,和Name所用語言無關
22 B5 9C
83
75 6E 64

// Master Video 視頻軌道視頻相關信息
E0
96
B0 82 01 60 BA 82 01 20 54 B0 84 00 00 01 60 54
BA 84 00 00 01 20
// Master ContextEncodings 軌道的壓縮或加密信息
6D 80
8E
// Master ContentEncoding 描述軌道使用的壓縮或加密信息
62 40
8B
// Master ContentCompression 具體壓縮信息
50 34
88
// ContentCompAlgo 描述壓縮算法
42 54
81
03
// ContentCompSettings 壓縮配置信息
42 55
81
00
// CodecPrivate 解壓時所需要的數據。如Vorbis編碼的初始化數據包
63 A2
98
01 42 E0 14 FF E1 00 08 67 42 E0 14 DA 05 82 51
01 00 05 68 CE 30 A4 80

// ??
EC
44 0F

// 預留空間

// Master Cluster 包括了視頻,音頻,字幕數據。
// 因爲MATROSKA文件提供了Charpter和Attachment子元素來表示其它的數據內容,所以可以沒有Cluster元素
1F 43 B6 75
20 7E 87

// TimeCode 用來做所包含的Block的開始時間碼
E7
81
00

// SimpleBlock 只包含一個數據塊,沒有附加信息,所以資源浪費會小很多,SimpleBlock由Matroska V2提供
A3
46 33
81 00 00 80
...(數據)

// Cues 包含了Cluster數據幀的時間戳,用來支持即時定位
1C 53 BB 6B     // ID
FD                         //長度

// Master CuePoint Track的定位信息
BB                         // ID
8C                         // 長度
// CueTime 在某Cluster的Block的時間碼
B3                         // ID
81                         // 長度
00
// Master CueTrackPositions Cluster和Block的定位信息
B7                         // ID
87                         // 長度
F7 81 01 F1 82 15 2B

// Master CuePoint Track的定位信息
BB                         // ID
8D                         // 長度
// CueTime 在某Cluster的Block的時間碼
B3
82
0A 28
// Master CueTrackPositions Cluster和Block的定位信息
B7
87
F7 81 01 F1 82 93 B9

// Master CuePoint Track的定位信息
BB
8E
// CueTime 在某Cluster的Block的時間碼
B3
82
21 98
// Master CueTrackPositions Cluster和Block的定位信息
B7
88
F7 81 01 F1 83 01 F0 32

// Master CuePoint Track的定位信息
BB
8E
// CueTime 在某Cluster的Block的時間碼
B3
82
39 08
// Master CueTrackPositions Cluster和Block的定位信息
B7
88
F7 81 01 F1 83 03 5A 29

BB
8E

B3
82
50 78
// Master CueTrackPositions Cluster和Block的定位信息
B7
88
F7 81 01 F1 83 04 BA D0

BB
8E

B3
82
67 E8
// Master CueTrackPositions Cluster和Block的定位信息
B7
88
F7 81 01 F1 83 05 C7 3D

BB
8E

B3
82
7F 58
// Master CueTrackPositions Cluster和Block的定位信息
B7
88
F7 81 01 F1 83 07 1A 26

BB
8E

B3
82
96 C8

// Master CueTrackPositions Cluster和Block的定位信息.
B7
88
// CueTrack Track的序號,等於TrackEntry元素的TrackNumber.
F7
81
01
// CueClusterPosition Cluster相對於Segment元素數據的相對地址
F1
83
08 76 F2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章