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 linux 封装字幕,【多媒体封装格式详解】---MKV【1】相关推荐

  1. LINUX下Socket编程 函数格式详解

    你需要了解的一些系统调用: socket() bind() connect() listen() accept() send() recv() sendto() recvfrom() close() ...

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

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

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

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

  4. RTMP协议封装H264和H265协议详解

    RTMP协议封装H264和H265协议详解 文章目录 RTMP协议封装H264和H265协议详解 1 RTMP和FLV 2 RTMP协议封装H264视频流 2.1 RTMP发送AVC sequence ...

  5. 音视频解封装:MP4核心Box详解及H264AAC打包方案

    ​问题背景: 上一篇文章<音视频封装:MP4结构概述和分析工具>让大家看了下MP4的主要结构和推荐了一些分析工具,如果你对MP4没有任何了解,还是先看上文,了解MP4的基本结构,其中还有许 ...

  6. linux 进程间通信 dbus-glib【实例】详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  7. linux 进程间通信 dbus-glib【实例】详解一(附代码)(d-feet工具使用)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  8. linux查看多核cpu运行状态,Linux下查看多核CPU信息详解

    Linux系统下,CPU信息详解(cpuinfo,多核,多线程) 在Linux系统中,如何详细了解CPU的信息呢? 当然是通过cat /proc/cpuinfo来检查了,但是比如几个物理CPU/几核/ ...

  9. Ffmpeg快速命令使用 Ffmpeg选项详解 Ffmepg格式详解 常见视频文件格式详解

    http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5 Ffmpeg快速命令使用 From Ffmpeg工程组 Jump to: navigatio ...

  10. Linux中/proc目录下文件详解

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

最新文章

  1. python爬取贴吧所有标题的评论_用BS4爬取贴吧文章的作者信息时,如何兼顾爬取高亮的作者信息?...
  2. 【MCtalk活动推荐】娱乐社交APP的AI探索、架构与性能优化实践
  3. Codeforces 991E. Bus Number (DFS+排列组合)
  4. 《嵌入式Linux与物联网软件开发——C语言内核深度解析》一2.4 位运算构建特定二进制数...
  5. 电脑机箱cad图纸_如何批量打印高清黑白CAD图纸?这么好用的方法现在才知道
  6. 天天讲路由,那 Linux 路由到底咋实现的!?
  7. android 滚动列表框,建立滚动列表框
  8. JavaScript——面向对象(封装)
  9. mysql 并发数 任务调度_mysql的计划任务与事件调度实例分析
  10. 问题-Delphi 中使用TStringList后,报out of memory 的解决方法
  11. 网站Banner图切换效果(flash)
  12. git revert与git reset
  13. dnf mysql密码多少_CentOS7 使用 dnf 安装 mysql
  14. CLion安装 + MinGW 配置 + Opencv安装
  15. web前端之HTML5 入门(9):脚本、速查列表、URL、字符实体
  16. java和c制作游戏软件,游戏软件制作,游戏软件制作入门教程
  17. java实现随机游走算法_java – 简单的2D随机游走
  18. 【绝对干货】Swift是花拳绣腿吗?从Swift谈开发语言与程序员的职业发展
  19. 牡丹江java奔腾有知道的吗_老转盘道和“奔腾广场”之间,藏着多少个日新月异?...
  20. 基于python的个人博客系统的设计开题报告_基于SSM的个人博客系统设计开题报告...

热门文章

  1. 机器是如何学习的?(监督式学习)
  2. Java随笔记录第二章:输入输出流程控制
  3. number of lines annotated by git is not equal to number of linus in the file .check file encoding an
  4. win10电脑锁屏快捷键
  5. [NOIP2011] 观光公交解题报告
  6. jsp清真餐馆订餐系统
  7. 2022美国大学生数学建模竞赛C题摘要及总结
  8. 计算机基础课件ppt教案,计算机应用基础教案项目二ppt课件.ppt
  9. 共享单车被带到乡下私用,警方:或涉嫌盗窃
  10. 游戏开发需要具备哪些技术?