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比特的个数.

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

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

将0x428 转成2进制 为 01000010    按照上面规则  前面有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 2 Level 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  
BlockGroup Block
BlockGroup
Block
ReferenceBlock
BlockGroup Block
Cluster
Timecode  
BlockGroup Block
BlockGroup Block
BlockGroup Block
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等若干子元素。

未完待续!

【多媒体封装格式详解】---MKV【1】相关推荐

  1. 【多媒体封装格式详解】---ASF(WMV/WMA)

    [1] ASF全称Advanced Systems Format 高级串流格式,微软出的一种开放封装格式的标准.它可以包含很多内容如:音视频.脚本命令.JPEG.二进制文件.或是由开发者自己定义的内容 ...

  2. 【多媒体封装格式详解】---ASF(WMV/WMA)【2】完

    4.the Data Object 这部分的内容就是asf文件中数据.Data Object 中包含着很多个 Data Packets.这些Data Packets里面就是音视频数据. 先来看看 Da ...

  3. 多媒体封装格式详解---MP4

    MP4文件格式详解--结构概述 http://blog.csdn.net/pirateleo/article/details/7061452 一.基本概念 1. 文件,由许多Box和FullBox组成 ...

  4. [转]多媒体封装格式详解---MP4

    原文 https://www.cnblogs.com/jingzhishen/p/3698570.html 参考 http://www.cnblogs.com/ranson7zop/p/7889272 ...

  5. 【多媒体封装格式详解】---MP4【1】

    MP4(MPEG-4 Part 14)是一种常见的多媒体容器格式,它是在"ISO/IEC 14496-14"标准文件中定义的. 1.最小组成单元 BOX 像FLV的tag.MKV的 ...

  6. 【多媒体封装格式详解】---ASF(WMV/WMA)【1】

    ASF全称Advanced Systems Format 高级串流格式,微软出的一种开放封装格式的标准.它可以包含很多内容如:音视频.脚本命令.JPEG.二进制文件.或是由开发者自己定义的内容.常见的 ...

  7. 【多媒体封装格式详解】---MP4

    [1] MP4(MPEG-4 Part 14)是一种常见的多媒体容器格式,它是在"ISO/IEC 14496-14"标准文件中定义的. 1.最小组成单元 BOX 像FLV的tag. ...

  8. MP4封装格式详解1

    转载自:http://blog.chinaunix.net/uid-20758197-id-5056943.html MP4(MPEG-4 Part 14)是一种常见的多媒体容器格式,它是在" ...

  9. 常见音视频文件的编码和封装格式详解

    常见的AVI.RMVB.MKV.ASF.WMV.MP4.3GP.FLV等⽂件其实只能算是⼀种封装标准. ⼀个完整的视频⽂件是由⾳频和视频2部分组成的.H264.Xvid等就是视频编码格式,MP3.AA ...

  10. F4V 封装格式详解(一)-------box

    F4V 是Adobe公司推出的用于支持H.264/AAC的媒体格式,而FLV 格式主要是用来支持其他格式,如Sorensen Spark (H.263 )和On2 VP6. 1. F4V 文件格式: ...

最新文章

  1. Java基础-异常(Exception)处理
  2. JSON,数组根据字段分组
  3. Metasploit渗透某高校域服务器
  4. HDU3388(二分+容斥原理)
  5. SAP UI5 Repository and MongoDB Repository
  6. c++ 随机字符串_第3章 别碰白块(《C和C++游戏趣味编程》配套教学视频)
  7. 如果苹果公司允许其他手机厂商使用iOS系统,对苹果公司来说会有什么好处?
  8. php常用的日期时间操作
  9. Bootstrap Table API 中文版 说明文档
  10. Libhybris之Glibc和Bionic共存时的TLS问题(四)
  11. 我是如何获取新知识的?
  12. Ajax 调用(传值)一般处理程序(.ashx)
  13. OrCAD Library Builder使用
  14. 网络计算机没有权限,电脑提示无网络访问权限的解决方法
  15. 用VirtualBox创建虚拟机
  16. 无线电频谱和波段划分
  17. VisualNet地税管道资源管理系统
  18. 5. 统计学基础1:平均值...四分位数、方差、标准差(均方差)、标准误(标准误差、均方根误差)、 标准分
  19. Wrong namespace. Expected ‘com.baizhi.mapper.UserMapper‘ but found ‘com.com.baizhi.mapper.UserMappe
  20. ECharts-漏斗图

热门文章

  1. Mono产品生命周期
  2. OOB模式下Exit事件的处理
  3. c语言复杂度为o(n)的排序算法,计数排序算法——时间复杂度O(n+k)
  4. hadoop启动_hadoop服务快速部署
  5. python 框架是什么意思_Python框架有哪些?区别是什么?
  6. 编程开发之--java多线程学习总结(4)
  7. 使用Ionic3创建原生app系统入门
  8. 极简静态 Web 服务器
  9. 在freemarker文件中,html标签获取后台的值
  10. 动态引入js文件和css样式表文件