[修订]mkv格式解析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

00
000
[转载]MKV文件格式(2009-09-16 14:24)0000
分类:Unsorted0000
原文地址:/CharlesPrince/archive/2009/030000
1.EBML (Extensible Binary Meta Language):00000
EBML语言使用不定长整数,这种方式相对于固定长度的32位/64位字长的整数值更节约空间.放置的位置也不受字节对齐约束..这种长度编码方式来自于UTF-8编码规范.00000
不定长度的无符号整数值(“vint”):0000
长度的计算方法:0000
长度= 1 +整数前缀0比特的个数.00000
使用大字节编码方式.00000
可以使用大于>=8字节的整数值,这时它的第一个字节的值将会是0x00,用来表达长度超过56位的整数值.但它是被MA TROSKA Y文件禁止的.0000
举个例子:0000
43 85 03:将它换算成二进制如下:01000011 10000101 00000011,前缀0比特的个数为1,总长度为:1 + 1 = 2,所包括的字节为:01000011 10000101,最前值为1的比特用作中止前缀0比特.它不能被用来计算整数的结果,那么最终的整数值等于:03 85(901).这样看来,1个字节表示长度最多可以有7个前缀0比特,它也是MA TROSKA文件所支持的整数最长长度.使数据所占的空间减小,这是EBML文件最大亮点.0000
长度未知整数值:0000
如果除了前缀0之外的比特位全部都是1的话,表示此整数的长度未知.MASTROSKA文件中除了文件头最后一个元素之外,都不要这样写.如果有的整数正好是这样的形式,要对它重编码,如:16383 = 7F FF,要把它编码成: 20 3F FF,虽然整数的长度不可避免的增加了.00000
EBML元素:00000
存储方式如下:0000
typedef struct {0000
vint ID; //Element ID00000
vint size; //Element size0000
char Data[size] //Element Data0000
} Ebml_Element;0000
包含其它元素的元素被称做:EBML Master Elements.子元素的排列顺序是任意的,但最好还是.有一种确定的定义.0000
有符号整数的表示方法:0000
大字节序,根据其值的正负符号来减去00或FF来得到具体的数值,如-257 = FE FF, FE FF –FFFF=257.00000
实数表示方法:
大字节序,可以使用32或64比特来表示IEEE标准定义的浮点数,虽然标准包括了80比特的浮点数,但MA TROSKA不使用.0000
字符串类型:0000
String类型用ASCII编码方式.UTF-8类型用UTF-8编码方式.0000
2.MA TROSKA文件项级元素:0000
只有两种顶级元素:0000
1. EBML Header:00000
用来描述文件中的内容,一个文件只能有一个EBML Header,更多的将被读取它的程序忽略掉.有的MKV生成器在添加多个文件时可能会出现这种情况.0000
2. Segment0000
包括了多媒体数据和回放时所需要的信息头.一个文件可以包括多个信息头,但很多的库不支持多个Segment,Windows平台下可以用Haali Media Splitter来支持多Segment.0000
3. EBML文件头:00000
描述了EBML编解码器的版本号,文件类型,文件名.00000
元素列表:0000
Uint EBMLV ersion ID:42 86默认值:1 EBML编码器版本号.0000
Uint EBMLReadV ersion ID:42 F7默认值:1 EBML解析器版本号0000
Uint EBMLMaxIDLength ID:42 F2默认值:4 EBML元素ID号的最长长度(多少字节),在
MA TROSKA文件中最长为4字节.0000
Uint EBMLMAXSizeLength ID:42 F3默认值:8 EBML元素最长长度(多少字节).00000
Uint DocTypes ID: 42 82默认值:matroska EBML文件中的内容类型,MA TROSKA文件
为”matroska”.00000
Uint DocTypeV ersion ID:42 87默认值:1 EBML文件包含数据的编码器版本号.0000
Uint DocTypeReadV ersion ID:42 85默认值:1 EBML文件包含数据的解析器版本号.00000
由于所有的元素都包括的默认值,所以可以使用空EBML文件头.0000
最好不要使ID和元素最大长度超过8字节,对于几乎所有数据来说,它已经足够了,同时对于当前流行的32/65位字长的计算机来说,它将使一次整数运算生成多条指令.0000
4. Segment
Master SegmentInfo ID:15 49 A9 66包括了SEGMENT元素的信息,如UID,标题等.0000
Master SeekHead ID:11 4D 9B 74指向SEGMENT子素的索引信息,可以指向其它的SeekHead,如果Cluster元素中的BlockGroup和SimpleBlock子元素在其尾部,那么可以不用SeekHead,不然的话,文件的帧数据地址定位将很复杂。

00000
Master Cluster ID:1F 42 B6 75包括了视频,音频,字幕数据。

因为MA TROSKA文件提供了Charpter和Attachment子元素来表示其它的数据内容,所以可以没有Cluster元素。

00000
Master Tracks ID:16 54 AE 6B描述了包含在Cluster中的数据轨道信息,可以在文件生成多个备份。

如果没有Cluster元素,Tracks元素也可以不存在。

0000
Master Cues ID:1C 53 BB 6B包含了Cluster数据帧的时间戳,用来支持即时定位。

0000 Master Attachment ID:19 41 A4 69包含了所有附加在此Segment元素中的文件。

00000 Master Chapter ID:10 43 A7 70包含了此Segment中所有文本支持信息。

0000
Master Tag ID:12 65 C3 67包含此Segmen或其子元素的其它附加信息,如作者名,多语言支持等,和回放无关。

0000
Segment包含元素:00000
SegmentInfo包含元素:0000
Char[16] SegmentUID ID:73 A4表示Segment的128位ID号,可以被其它的文件引用。

0000
Utf-8 SegmentFilename ID: 73 84保存此Segment的文件名,但文件名是很容易被改动的,所以没有较高的可靠性。

0000
Char[16] PrevUID ID:3C B9 23指向前一个Segment的128位的ID号,用在定位此Segment 之前的时间点,利用它可以方便的找出同目录下的相应文件。

0000
Utf-8 PrevFileName ID:3C 83 AB包含前一个Segment的文件的名称,如果找不到,可以通过遍历文件中的SegmentUID查找。

0000
Char[16] NextUID ID:3E B9 23指向后一个Segment的128位ID号,用于定位超出此Segment 范围的时间点。

0000
Utf-8 NextFileName ID:3E 8E BB包含后一个Segment的文件的名称。

0000
Uint TimecodeScale ID:2A D7 B1每个时间码都通过和此值相乘来得到具体时间(微秒单位),但不是所有的时间码都这样。

0000
Float Duration ID:44 89此Segment的总回放时间,将其乘以TimecodeScale来得出具体时间(微秒单位)。

0000
Uft-8 Title ID:7B A9此Segment的名称,如”Lord of the rings”不可以指定时间,可以用Tag 元素来加入多个标题。

0000
String MuxingApp ID:4D 80生成此文件的库名称,如”libMatroska-0.7.0”,在发生问题时可以参考。

0000
Utf-8 WritingApp ID:57 41生成此文件的程序名称,如”mkvmerge 0.8.1”。

0000
Int DateUTC ID:44 62生成此文件的时间,从2001.01.01 0:00:00 GMT+0h开始计算。

0000
SeekHead包含元素:00000
SeekHead包含了Segment的子元素的位置列表,每对位置,ID号对应着一个Seek元素:0000 Master Seek ID:4D BB包含了一个Segment的子元素的ID号和它的具体位置。

0000
Seek包含元素:0000
Uint SeekID ID:53 AB某Segment的子元素的ID号。

0000
Uint SeekPosition ID:53 AC对应SeekID的元素的位置(相对于Segment数据首地址)。

0000
SeekHead元素通常包含了全部的Segment的子元素,但有时Cluster元素是个例外。

也可以引用另一个SeekHead,比如文件开始有一个小的SeekHead,它引用了另一个在文件尾的SeekHead。

0000
Tracks包含元素:0000
包含了存储在Segment元素中轨道的信息,比如轨道类型(音频,视频,字幕),编码器ID,采样率。

最好将所有的轨道信息包含在一个Tracks元素中。

0000
每个轨道用一个TrackEntry元素来表示。

虽然理论也可以使用TrackUID将轨道信息放在多个TrackEntry中。

00000
有时会出现空TrackEntry元素,但如果所有的轨道都存储在一起或根本就没有轨道(如只有Chapter元素)将不会发生文件解析错误。

0000
Master TrackEntry ID:4E描述一个在Segment元素中的轨道。

0000
TrackEntry包含元素:0000
Uint TrackNumber ID:D7轨道的序列号,不可以为0,将被Cluster的子元素Block和SimpleBlock使用。

00000
Uint TrackUID ID:73 C5轨道的ID号,不可以为0。

0000
Uint TrackType ID:83轨道的类型,如视频,音频,字幕。

00000
Bool FlagEnabled ID:89默认值:1是否使用此轨道。

0000
Bool FlagDefault ID:88默认值:1是否默认播放,如果没有此值为1轨道,将由播放器选择。

0000
Bool FlagForced ID:55 AA是否必须播放,如果多个字幕轨道都包括此属性,那么将选择和音频语言相同的轨道,只会被数位限制管理(DRM)使用。

00000
Bool FlagLac ing ID:9C默认值:1是否包括了捆绑数据块(表示在一个数据块中包含多帧lacing block)。

0000
Uint MinCache ID:6D E7默认值:0在播放时必须提供多少帧的缓存区,比如当MPEG4帧以其编码顺序来播放时使用。

0000
Uint MaxCache ID:6D F8在播放时最大可以提供多少帧缓存区,如果等于0,表示不使用缓存。

0000
Uint DefaultDuration ID:23 E3 83表示一帧持续了多少微秒。

当没有Duration元素或使用捆绑(lacing)方式时将使用此值。

如果值为0表示此轨道的帧的持续时间不定。

(如V orbis音频)。

使用此值将使文件的定位非常容易。

0000
Float TrackTimecodeScale ID:23 31 4F Block元素的时间码+Cluster时间码乘以此值得到Block的具体时间。

0000
Utf-8 Name ID:53 6E轨道的名称,不可指定语言。

0000
String Language ID:22 B5 9C默认值:eng轨道使用的语言,和Name所用语言无关。

0000 String CodecID ID:86默认值:86轨道使用的编码类型ID。

00000
Binary CodecPrivate ID:63 A2解压时所需要的数据。

如V orbis编码的初始化数据包。

0000
Utf-8 CodecName ID:25 86 88编码类型名称。

00000
Uint AttachmentLink ID:74 46附加在此轨道上的Attchment元素UID。

0000
Master V ideo ID:E0视频轨道视频相关信息。

00000
Master Audio ID:E1音频轨道音频相关信息。

0000
Master ContextEncodings ID:6D 80轨道的压缩或加密信息。

0000
注意Video和Audio元素与轨道的数据的匹配,否则文件将不能回放。

0000
Video包含元素:0000
Uint PixelWidth ID:B0视频帧的宽度(像素单位)。

00000
Uint PixelHeight ID:BA视频帧的高度(像素单位)。

00000
Uint PixelCropBottom ID:54 AA默认值:0从视频帧底部裁减多少像素。

0000
Uint PixelCrop ID:54 BB默认值:0从视频帧顶部裁减多少像素。

0000
Uint PixelCropLeft ID:54 CC默认值:0从视频帧左侧裁减多少像素。

00000
Uint PixelCropRight ID:54 DD默认值:0从视频帧右侧裁减多少像素。

0000
Uint DisplayWidth ID:54 B0默认值:PixelWidth回放屏幕宽度。

00000
Uint DisplayHeight ID:54 BA默认值:PixelHeight回放屏幕高度。

00000
Uint DisplayUnit ID:54 B2默认值:0回放屏幕宽度和高度单位。

0-像素1-厘米2-英尺。

00 00
解码后,从Pixelxxx长度中裁减Cropxxx长度,然后拉伸至Displayxxx值回放。

00000
Audio包含元素:00000
Uint SamplingFrequency ID:B5默认值:8k轨道采样率(单位Hz)。

0000
Uint Output-SamplingFrequency ID:78 85回放时使用的采样率。

默认为SamplingFrequency。

00000
Uint Channels ID:9F默认值:1轨道包含声道数。

0000
Uint BitDepth ID:62 64 bps(bit per sample),通常用于PCM音频。

00000
ContentEncodings包含元素:0000
Master ContentEncoding ID:62 40描述轨道使用的压缩或加密信息。

00000
ContentEncoding包含元素:00000
Uint ContentEncoding-Order ID:50 31默认值:0解码器的优先级,值最大的最先使用。

0000
Uint ContentEncoding-Scope ID:50 32默认值:1轨道的哪一部分使用了此加密或压缩方式。

0000
Uint ContentEncoding-Type ID:50 33默认值:0编码类型0-压缩1-加密。

0000
Master ContentCompression ID:50 34具体压缩信息。

00000
Master ContentEncryption ID:50 35具体加密信息。

0000
ContentEncoding元素有时可以达到压缩和加密兼有的效果,如压缩字幕,或将音频帧的同频头去掉。

AC-3音频起始字节为:0B 77,在MA TROSKA文件中它不存在。

0000
ContentCompression包含元素:0000
ContentCompAlgo ID:42 54默认值:0描述压缩算法。

00000
ContentCompSettings ID:42 55压缩配置信息。

0000
TrackType元素值种类:0000
0x01视频轨道。

0000
0x02音频轨道。

0000
0x03混合音视频轨道。

0000
0x10标志(logo)轨道。

0000
0x11字幕轨道。

00000
0x12按钮轨道。

0000
0x20控制轨道。

0000
ContentEncodingScope比特值:0000
1全部帧。

0000
2由轨道的CodecPrivate指定。

0000
4用于下个ContentEncoding元素(由解码顺序指定)。

0000
ContentCompAlgo元素值种类:0000
0 zlib0000
1 bzlib0000
2 lzo1x00000
3 header striping0000
Cluster包含元素:0000
一个Cluster元素通常包含了几秒钟的多媒体数据,子元素的顺序不固定,但最好将第一个BlockGroup或SimpleBlock元素放在最前部,这样方便找出时间码。

0000
Uint TimeCode ID:E7默认值:0用来做所包含的Block的开始时间码。

0000
Uint Position ID:A7父元素在祖父元素的开始位置。

在数据损坏时进行同步。

0000
Uint PrevSize ID:AB前一个Cluster的大小(字节单位)。

方便反向定位和找出前面的Cluster,而不需要使用MetaSeek和Cue元素,在Cluster的ID值损坏后,定位仍可正常进行.0000
Master BlockGroup ID:A0包含一个数据块及其相关信息如引用等.00000
Binary SimpleBlock ID:A3只包含一个数据块,没有附加信息,所以资源浪费会小很
多,SimpleBlock由Matroska V2提供.0000
BlockGroup包含元素:00000
Binary Block ID:A1回放数据.0000
Int ReferenceBlock ID:FB某帧相对于此数据块的时间码,在解码此数据块时必须已经将此帧解码.0000
Int BlockDuration ID:9B此数据块的时间码,如果没有此元素,由下一数据块时间码-前一数据块时间码或DefaultDuration来计算.通常字幕是不需要知道持续时间的,除非确实需要控制它的显示时间,但最好还是写入它的Duration元素.0000
Cues包含元素:0000
Cues包含了非常有用的定位信息.信息的单元,称为CuesPoint,包含了时间戳,地址信息(Tracker号,Cluster位置,此Cluster的Block号.通常只用于定位关键帧.00000
Master CuePoint ID:BB Track的定位信息.0000
Uint CueTime ID:B3在某Cluster的Block的时间码.0000
Master CueTrackPositions ID:B7 Cluster和Block的定位信息.0000
CueTrackPostions包含元素:00000
Uint CueTrack ID:F7 Track的序号,等于TrackEntry元素的TrackNumber.0000
Uint CueClusterPosition ID:F1 Cluster相对于Segment元素数据的相对地址.00000
Uint CueBlockNumber ID:53 78 Block的序号,在这个Cluster中.0000
Chapter包含元素:0000
包含了此Segment的全部文本信息.和DVD的Chapter相比,增强了很多,处理更加复杂.0000
Master EditionEntry ID:45 B9描述了一个文本集,理论上可以用多个EditionPoint来描述同一文本集,但不推荐使用.0000
一个文本集包含了多个文本段落,可以有多个文本集.像播放列表一样使用,以一定间隔依次播放.0000
EditionEntry包含元素:0000
Uint EditionUID ID:45 BC文本集的ID号.0000
Bool EditionFlagHidden ID:45 BD默认值:0用户是否可以看到.00000
Bool EditionFlagDefault ID:45 DB默认值:0播放器默认设置.0000
Bool EditionFlagOrdered ID:45 DD默认值:0文本段落是否顺序播放.00000
Master ChapterAtom ID:B6文本段落的定义,内部也可以包含ChapterAtom.00000
ChapterAtom包含元素:00000
Uint ChapterUID ID:73 C4文本段落的ID号,在文件中唯一.00000
Uint ChapterTimeStart ID:91文本段落的开始时间(没有比例值),不可以小于0,即使多媒体数据时间最小为-30.000.0000
Uint ChapterTimeEnd ID:92文本段落的结束时间,可能是下个段落的开始.00000
Bool ChapterFlagHidden ID:98默认值:0用户是否可见.0000
Bool ChapterFlagEnabled ID:45 98默认值:1是否被播放器跳过.0000
Char[16] ChapterSegmentUID ID:6E 67仅当EditionFlagOrdered=1才有这个元素,用来定位此
段落对应的Segment.可以通过搜索当前目录来找到相应文件.00000
Uint ChapterSegment-EditionUID ID:6E BC文本段落集在由ChapterSegmentUID指定的Segment中的UID号.ChapterTimeStart和ChapterTimeEnd指定相应的回放时间.不被Haali Media Splitter支持.00000
Master ChapterTracks ID:8F文本段落应用的Track列表.00000
Master ChapterDisplay ID:80所有文本段落的内容.0000
ChapterTracks包含子元素:00000
Uint ChapterTrackNumber ID:89 Track序号。

0000
Utf-8 ChapString ID:85文本内容。

00000
String ChapLanguage ID:43 7C默认值:eng所用语言,ISO639-2标准定义。

0000
Utf-8 ChapCountry ID:43 7E文本内容对应的国家代码,和语言无关。

0000
Attachments包含元素:00000
Master AttachedFile ID:61 A7包含附加文件及其相应信息。

0000
AttachedFile包含元素:0000
Utf-8 FileDescrition ID:48 7E文件的描述。

0000
Utf-8 FileName ID:46 6E附加文件名。

0000
String FileMimeType ID:46 60文件的MIME类型。

00000
Binary FileData ID:46 5C文件数据。

00000
Uint FileUID ID:46 AE附加文件的UID,可以被TrackEntry引用。

0000
Tags包含元素:0000
Master Tag ID:73 73描述一个标签。

00000
Tag包含元素:00000
Master Targets ID:63 C0标签应用至的元素。

0000
Master SimpleTag ID:67 C8每个SimpleTag为一个对应于Targets的标签。

00000
Targets包含元素:00000
Uint TargetTypeV alue ID:68 CA默认值:50此标签应用至的对象级别。

0000
Uft-8 TrackUID ID:63 C5此Tag对应的Track的UID.00000
Uint EditionUID ID:63 C9此Tag对应的Edition的UID.只用来给Edition加入标题.00000 Uint EditionUID ID:63 C4此Tag对应的Chapter的UID.00000
Uint AttachmentUID ID:63 C6此Tag对应的Attachment的UID.0000
SimpleTag包含元素:0000
Utf-8 TagName ID:45 A3 Tag的名称.0000
String TagLanguage ID:44 7A默认值:und TagName元素使用的元素.默认值比较特殊是”und”.
0000
Bool TagOriginal ID:44 84默认值:1是否作为原始标题.0000
Utf-8 TagString ID:44 87 Tag的字符串值.0000
Binary TagBinary ID:44 85 Tag的二进制值.0000
一些常用的Tags0000
TITLE, Target是EditionUID,用来定义Edition的名称.它可以在屏幕上看到.0000
BPS, Target是TrackUID,用来定义此Track的比特率.00000
FPS,Target是TrackUID,用来定义此Track的帧率.0000。

相关文档
最新文档