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
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