ID标志属性类型,size为后面data部分的大小,data部分为ID所标识属性的实际数据,ID和size均为可变长编码的整数。整数的长度为length=1+[number of leading zero bits]。前面的零的个数最多为7个,即最多能表示56个比特的整数。文件中不允许出现大于56比特的数。
MKV文件格式的显著特点是模块化、结构化存储。每一个高一级的元素由若干次一级的元素组成,直至最基本的组成元素,每个元素都是一个TLV结构。一个标准的MKV文件有两部分组成:EBML Header和Segment。EBML Header由EBMLVersion、DocType等子元素组成,包含了文件的版本、文档类型等相关信息。Segment部分保存了媒体文件的视频和音频的实际数据,其data部分又可以分为SeekHead、Tracks、Cluster等若干子元素(表1)。所有元素的处理都可以按照一个统一的流程来进行。我们可以仿照TCP/IP协议分层的思想,对每一层的每个功能都用一个函数来完成,使用更底层的函数完成此项功能,并可被更高层的函数调用。文件解析时,从文件顶层开始,每当上一级的元素解析到有某个子元素时,调用此函数进行次一级的解析,依次直至文件结束,即可完成对文件的解析处理。整个MKV的解析调用过程如图3所示。Hea-der Parse和Segment Parse为文件最上层的元素解析函数,Cluster Parse、Tracks_Parse等为次一级组成元素的解析函数。ebml_read_ele-ment_idebml read element length为最底层基本组成元素的解析函数。