视频封装格式之mkv--1

视频封装格式之mkv--1

        Matroska是一种多媒体封装格式,这个封装格式可把多种不同编码的视频及16条或以上不同格式的音频和语言不同的字幕封装到一个Matroska Media档内。它也是其中一种开放原始码的多媒体封装格式。很多人把Matroska当作为mkv,其实mkv只是Matroska媒体系列的其中一种档案格式。

        Matroska媒体定义了三种类型的档:MKV(Matroska Video File,视讯档,可以包含音讯和字幕)、MKA(Matroska Audio File,单一的音讯档,可以有多条及多种类型的音轨)和MKS(Matroska Subtitles,字幕文件),这三种文件中以MKV最为常见,是一种万能的封装容器。

        2002年12月7日开始开发,是多媒体封装格式科研计划之一,其采用EBML(Extensible Binary Meta Language,可扩展的二进制语言)取代其他的二进制格式,其有很多优点,节省空间,容易扩展等。

1. EBML可扩展的二进制语言

        EBML是一种类似于XML格式的可扩展二进制语言,是用可变长度的整数存储,以节省空间每个EBML元素都有ID(属性类型)、size(后面data部分的大小)和data(实际的数据)三部分组成,

      typedef struct EBML{
        vint ID; //ID的类型长度是可变的
        vint size; //size的类型长度是可变的
        char[size] data;///数据
      };

        ID和size的长度是不固定的,需要通过计算得到,长度=1+整数前缀0比特的个数,举例如下,mkv文件中一段16进制表示的数据:

        .....42 82 88 6D 61 74 72 6F 73 6B 61 42 87 81 01......
        1. 将0x42转成二进制为01000010,按照上面规则前面有1个0 所以知道ID的长度为2个字节,也就是0x4282为ID值;
   2. 将0x88 转成2进制为10001000,1为开头,长度就是1,去掉前缀1变成了00001000,也就是size的值为 8;

        3. 接下来的8个字节就是data值:6D 61 74 72 6F 73 6B 61,根据上面ID值查表得知这个EMBL名称为DocType,也就是说data的内容是string格式,所以转成ASKII码data值就是“matroska” 和后面显示的一致。

  所以这个EBML元素就解析出来了ID=0x4282;size=8;data=“matroska” ;后面的数据,同理得知42 87是ID值,长度是81(一个字节),后面是其值01,查表可知4287代表DocTypeVersion,值类型是整数,于是解析后的结果是ID=0x42 87,size=1,data=1。
        综上,此段EBML码解析后的结果是:DocType=matroska,DocTypeVersion=1。
2. MKV文件的整体框架
        框架主要有两部分构成EBML Header和Segment。每个EBML元素都有自己的级别,每个高一级别的元素由若干个次一级的元素组成。
        EBML Header主要有EBMLVersion、DocType等子元素组成,包含了文件的版本、文档类型等相关信息;
        Segment是音频相关信息的保存地方,其有次一级的Track、Clusters、Cueing Data等组成:
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值