一. MKV文件组成结构
二.MKV文件中元素说明
表1 MKV 文 件 组 成 结 构 | ||||
元素 | 子元素 | ID | 说 明 | |
EBML
| EBMLVersion | 42 86 | EBML编码器版本号 | |
EBMLReadVersion | 42 F7 | EBML解析器版本号 | ||
EBMLMaxIDLength | 42 F2 | EBML元素ID号的最长长度(多少字节) | ||
EBMLMAXSizeLength | 42 F3 | EBML元素最长长度(多少字节) | ||
DocTypes | 42 82 | EBML文件中的内容类型 | ||
DocTypeVersion | 42 87 | EBML文件包含数据的编码器版本号 | ||
DocTypeReadVersion | 42 85 | EBML文件包含数据的解析器版本号 | ||
Segment | SeekHead | 11 4D 9B 74 | 指向SEGMENT子元素的索引信息,可以指向其它的SeekHead.如果Cluster元素中的BlockGroup和SimpleBlock子元素在其尾部,那么可以不用SeekHead,不然的话,文件的帧数据地址定位将很复杂 | |
SegmentInfo | 15 49 A9 66 | 包括了SEGMENT元素的信息,如UID,标题等 | ||
Tracks | 16 54 AE 6B | 描述了包含在Cluster中的数据轨道信息,可以在文件生成多个备份。如果没有Cluster元素,Tracks元素也可以不存在。 | ||
Cluster |
| 包括了视频,音频,字幕数据。因为MATROSKA文件提供了Charpter和Attachment子元素来表示其它的数据内容,所以可以没有Cluster元素。 | ||
Cluster | 1F 43 B6 76 | 同 上 | ||
… | … | … | ||
Cues | 1C 53 BB 6B | 包含了Cluster数据帧的时间戳, |
表2 SeekHead | |||
元素 | 子元素 | ID | 说 明 |
SeekHead
| Seek
| 4D BB
| 包含了一个Segment的子元素的ID号 |
表2-1 Seek | |||
元素 | 子元素 | ID | 说 明 |
Seek
| SeekID | 53 AB | 所包含的Segment子元素的ID号 |
SeekPosition | 53 AC | 对应SeekID的元素的位置 |
表3 SegmentInfo | |||
元素 | 子元素 | ID | 说 明 |
Segment | TimecodeScale | 2A D7 B1 | 每个时间码都通过和此值相乘来得到具体时间 (微秒单位) |
MuxingApp | 4D 80 | 生成此文件的库名称,如 | |
WritingApp | 57 41 | 生成此文件的程序名称,如 | |
Duration
| 44 89
| 此Segment的总回放时间, | |
DateUTC
| 44 61
| 生成此文件的时间, | |
SegmentUID | 73 A4 | 表示Segment的128位ID号, |
表4 Tracks | |||
元素 | 子元素 | ID | 说 明 |
Tracks | TrackEntry | AE | 每个轨道用一个TrackEntry元素来表示 |
表4-1 TrackEntry | |||
元素 | 子元素 | ID | 说 明 |
Track | TrackNumber | D7 | 轨道的序列号,不可以为0,将Cluster的子元素Block和SimpleBlock使用 |
TrackUID | 73 C5 | 轨道的ID号,不可以为0 | |
TrackType | 83 | 轨道的类型,如视频,音频,字幕 | |
FlagLacing | 9C | 是否包括了捆绑数据块 | |
MinCache | 6D E7 | 在播放时必须提供多少帧的缓存区 | |
CodecID | 86 | 轨道使用的编码类型ID | |
DefaultDuration | 23 E3 83 | 表示一帧持续了多少微秒。当没有Duration元素或使用捆绑(lacing)方式时将使用此值。 | |
Language | 22 B5 9C | 轨道使用的语言,和Name所用语言无关 | |
Video | E0 | 视频轨道视频相关信息 | |
ContextEncodings | 6D 80 | 轨道的压缩或加密信息 | |
ContentEncoding | 62 40 | 描述轨道使用的压缩或加密信息 | |
ContentCompression | 50 34 | 具体压缩信息 | |
ContentCompAlgo | 42 54 | 描述压缩算法 | |
ContentCompSettings | 42 55 | 压缩配置信息 | |
CodecPrivate | 63 A2 | 解压时所需要的数据。 |
表5 Cluster | |||
元素 | 子元素 | ID | 说 明 |
Cluster | TimeCode | E7 | 用来做所包含的Block的开始时间码 |
SimpleBlock | A3 | 只包含一个数据块,没有附加信息,所以资源浪费会小很多,SimpleBlock由Matroska V2提供 |
表6 Cues | |||
元素 | 子元素 | ID | 说 明 |
Cues | CuePoint | BB | Track的定位信息 |
表6-1 CuePoint | |||
元素 | 子元素 | ID | 说 明 |
CuePoint
| CueTime | B3 | 在某Cluster的Block的时间码 |
CueTrackPositions | B7 | Cluster和Block的定位信息 |