【多媒体封装格式详解】---MKV【1】


Matroska 开源多媒体容器标准。MKV属于其中的一部分。
Matroska常见的有.MKV视频格式、MKA音频格式、.MKS字幕格式、.MK3D files (stereoscopic/3D video).

1.EBML(Extensible Binary Meta Language)


MKV是建立在EBML这种语言的基础上,所以要了解MKV格式需要先了解EBML这种语言。

EBML是一种类似于XML格式的可扩展二进制元语言,使用可变长度的整数存储,以节省空间。

EBML基本元素结构:

typedef struct {
vint ID // EBML-ID
vint size // size of element
char[size] data // data
} EBML_ELEMENT;

ID标志属性类型

size为后面data部分的大小

data部分为ID所标识属性的实际数据

上面可以看到ID和size的类型都是vint,vint(Unsigned Integer Values of Variable Length)可变长度无符号整型,比传统32/64位整型更加节省空间。

长度计算方法为

长度 = 1 +整数前缀0比特的个数.


(解释:由于ID和size是可变长度无符号整形,所以此处的长度是ID或size所占的字节数,对于ID,对应字节数的值就是ID的值;对于size,去掉前缀的值就是size的值,即其后data的size大小。)


从MKV文件中简单接一段来举个例子。这是16进制表示方式


因为每个EBML元素都是由ID size data 三部分组成,我们就按照这些来分析。

将0x42 转成2进制 为 01000010    (不满8位的拿0补齐)按照上面规则  前面有1个0 所以知道ID的长度为2,也就是0x4282为ID值。

将0x88 转成2进制为 10001000 1为开头 长度就是1,去掉前缀1变成了00001000 ,也就是 size的值为 8.

接下来的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” ;

得到的信息就是 DocType = matroska。


2.整体结构


让我们看看MKV的整体框架结构。

Level 0
Grouping
Level 1
Level 2Level 3
EBML
Header
EBMLVersion
 
DocType
 
Segment
Meta Seek Information
SeekHead
Seek
SeekID
SeekPosition
Seek
SeekID
SeekPosition
Segment Information
Info
Title 
SegmentUID 
Track
Tracks
TrackEntry
Name
TrackNumber
TrackType
TrackEntry
Name
TrackNumber
TrackType
Chapters
Chapters
Edition Entry 
Clusters
Cluster
Timecode 
BlockGroupBlock
BlockGroup
Block
ReferenceBlock
BlockGroupBlock
Cluster
Timecode 
BlockGroupBlock
BlockGroupBlock
BlockGroupBlock
BlockGroup
Block
BlockDuration
Cueing Data
Cues
CuePoint
CueTime
CuePosition
CuePoint
CueTime
CuePosition
Attachment
Attachments
AttachedFile
FileName
FileData
AttachedFile
FileName
FileData
Tagging
Tags
Tag
MultiTitle
Language
Tag
MultiTitle
Language
EBML元素都有自己的级别, 每一个高一级的元素由若干次一级的元素组成。
从整个MKV文件整体来看可分为2大部分:

EBML Header和Segment。

EBML Header由EBMLVersion、DocType等子元素组成,包含了文件的版本、文档类型等相关信息。

Segment部分保存了媒体文件的视频和音频的实际数据,其data部分又可以分为SeekHead、Tracks、Cluster等若干子元素。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值