MATROSKA文件格式之Segments学习
MATROSKA(MKV)格式仅仅包含两种Top Level Elements,即EBML Header和Segment。
EBML Header用来描述一个EBML文件,而且一个文件只包含一个EBML Header。更多的EBML Header将会被读取它的应用程序忽略掉。MKV合成器在合成多个文件时可能会出现这样的情况,即包含多个EBML Header。EBML Header包含的内容包括:编码器版本、解析器版本、文件类型等。
Segment包含多媒体数据和各个必要的Header信息。一个MKV文件可以包含多个Segment,但不提倡这样做,因为并不是所有的工具都能够正确的处理多segment。
1、Element Inside Segment
包含在Segment中的element被称为Level 1 Element。Segment包含的element如表1所示。
表1 Segment包含的elements
2、SeekHead
SeekHead包含了一个关于Segment中的Element的位置的列表,列表的每个元素被称为Seek Element。每个Seek Element由Element ID和Position组成,如表2所示。
表2 Seek Element包含的元素
在SeekHead中,没有明确的说明在该别表中包含了多少个Seek Element,因此需要一个一个进行解析并获得Seek Element的个数。比如, 标识Seek Element的EBML-ID为0X4DBB,因此,到解析出0X4DBB时,就说明出现了一个Seek Element。
3、Cluster
Cluster包括多媒体数据和时间跨度。虽然不强制坚持elements的顺序,但是最好不要在第一个BlockGroup/SimpleBlock之后出现非BlockGroup/SimpleBlock。
Cluster中的Block有两种类型:
(1)BlockGroup,这种block带有一些附加信息,比如参考数据等。
(2)SimpleBlock,这种block不带有附加信息,而且开销比较小。
Block的格式如下所示:
BLOCK {
vint TrackNumber
sint16 Timecode // relative to Cluster timecode
int8 Flags // lacing , keyframe , discardable
if ( lacing ) {
int8 frame_count − 1
if ( lacing == EBML lacing ) {
vint s i ze [0]
s vint s i ze [1 . . frame_count−2]
} el se i f (lacing == Xiph lacing ) {
int8 size [size of < leading (frame_count−1) frames> / 255 + 1]
}
}
int8 [ ] data
}
其中,lacing有三种类型:Xiph lacing、EBML lacing和Fixed lacing。Lacing 是一种技术,这种技术允许在一个block中包含多个frame数据,这样可以降低开销,而且在后面对Lacing的处理过程中可以很容易的将frame分开。通常,在Lacing中的最后一个frame的大小是不保存的,因为它可以通过block的大小、block header的大小以及其他的frame的大小推算出来。
(1)Xiph lacing:将每个frame的大小编码成八位整数的和。如果一个数值小于255,说明下一个数值是一个frame的。例如:
size = {187, 255, 255, 120, 255, 0, 60}
改Lacing包含四个frame,它们的大小分别为:187、255 + 255 + 120 = 630,、255 + 0 = 255、60。
(2)EBML Lacing:lace中的第一个frame的大小为size[0],第i个frame的大小为size[i] - size[i - 1]。
(3)Fixed Lacing:lace中的所有frame具有相同的大小,因此不需要知道lace中frame的个数就足够了。
4、Cues
Cues包含了有助于seek操作的有用信息。每个Cue包含一个CuePoint element,里面包含了时间戳和一个列表,类表的每个元素由track号和cluster position[,cluster的block号]。通常情况下,CuePoint应该仅仅只指向关键帧。每个CuePoint包含一个指向一个timecode的entry或者一个entry列表,该entry列表中有一个entry指向track。
每个CuePoint element包含两个重要的element:CueTime和CueTrackPositions。
CueTime:与CuePoint相关的Clusters或Blocks的timecode。
CueTrackPositions:在该位置能够找到与CueTime相关的Cluster或Block。
其中,CueTrackPositions包含的element如表3所示:
表3 CueTrackPositions包含的element
5、Chapters
Chapters包含了在Segment中能够找到的所有的editions和chapters。MKV文件中的Chapters是非常有用的而且处理方式也比较复杂。Chapters element包含了一个EditionEntry element,用来描述Edition。一个edition会包含一组关于chapter的定义,因此,如果有多个edition,就意味着有多组关于chapter的定义。当存在一个playlist的时候这种情况就会出现,播放完一个chapter之后播放另一个,而且在这些chapter之间会有间隙。EditionEntry包含的element如表4所示。
表4 EditionEntry包含的element
MATROSKA文件格式之Segments学习相关推荐
- Matroska文件格式标准
转载自:http://matroska.org/technical/specs/index.html Specifications View Revisions Status of this docu ...
- linux在cd后直接显示文件格式,Linux命令学习笔记之一目录与文件基本操作
目录操作 cd:进入目录 基本格式:cd 目录名 例子: 1).在当前目录进入子目录a,输入"cd a" 2).在当前目录进入根目录下的子目录tmp,输入"cd /tmp ...
- android上传sd卡文件格式,Android开发学习:向模拟器的sdcard中添加文件
向模拟器的sdcard中添加文件有两种方法: 1.在eclipse的DDMS视图中操作 启动eclipse---打开DDMS视图---选择File Explorer,出现下面的窗口 选中sdcard文 ...
- obj文件格式与mtl文件格式
.obj文件格式与.mtl文件格式 最近在学习obj文件格式,上网查了些资料,很难找到比较全面的文章,尤其是对.mtl文件的说明甚少.今天把最近搜索的资料整合了一下. 这里的obj文件格式指的是Wav ...
- Matroska文件解析之SimpleBlock
分析二进制文件是一件痛苦的事情,最近在做一个关于流媒体的项目研究,涉及到webm这种开源视频文件,它其实就是用Matroska(也就是大家熟悉的MKV容器格式)包裹VP8和VBRIS,没什么特别的. ...
- SitePoint播客#63:有两个网站
Episode 63 of The SitePoint Podcast is now available! This week your hosts are Patrick O'Keefe (@iFr ...
- Weka中数据挖掘与机器学习系列之Exploer界面(七)
不多说,直接上干货! Weka的Explorer(探索者)界面,是Weka的主要图形化用户界面,其全部功能都可通过菜单选择或表单填写进行访问.本博客将详细介绍Weka探索者界面的图形化用户界面.预处理 ...
- python语言初学
python python是一门解释性语言(C语言编写的),意味着它是逐行翻译解释代码的 python的执行程序文件格式:.py 参考学习:黑马程序员Python教程_600集Python从入门到精通 ...
- 天融信AlphaFuzzer测试工具 使用教程
原文:http://blog.topsec.com.cn/ad_lab/alphafuzzer/ AlphaFuzzer1.1 AlphaFuzzer1.2 更新记录: 2015年7月30日 1.2 ...
最新文章
- 数据产品经理:如何做需求管控?
- 实践自定义UI—View
- byte数组转file不写入磁盘_Linux 环境写文件如何稳定跑满磁盘 I/O 带宽?
- python3反爬虫原理与绕过实战 网盘_Python 3反爬虫原理与绕过实战
- 2007年10月小记
- 前端学习(565):margin重叠意义
- Spring Data JPA 禁止自动更新
- C/C++中字符串与数字相互转换
- 解决方案-CMake error: error in configuration process, project files may be invalid(WindowsVS可参考)
- 分页标签commons.tld,NavigationTag,Page
- presto 时间函数
- 【中学】寻找阿姆斯特朗数
- matlab 图案 柱状图_科学网—使用matlab绘画柱状图,且使用不同的图案填充 - 时杰的博文...
- 大学C语言学习笔记(C语言程序设计第五版——谭浩强,翁凯C语言基础教程)基础、算法、程序结构、数组、函数、指针、枚举、结构、联合
- 2020国内外常用的BI商业智能软件
- php 九宫格验证码,PHP+Ajax微信手机端九宫格抽奖实例
- 洛谷P1478 陶陶摘苹果(升级版)【水题】
- 长三角政务服务“一网通办” 公积金提取 `网签合同编号`如何获取?
- 无限循环小数转化分数
- CentOS curl命令详解