MKV 封装格式笔记(一)

本篇笔记主要记录AVS2MKV提交过程中的学习内容,主要包含:

  1. MKV格式介绍
  2. MKV工作方式
  3. MKV修改应用

主要参考链接: MKV - Matroska Home page // 各部分标注在相应标题中


1 What's MKV

Matroska aims to become THE standard of multimedia container formats. It was derived from a project called MCF, but differentiates from it significantly because it is based on EBML (Extensible Binary Meta Language), a binary derivative of XML. EBML enables the Matroska Development Team to gain significant advantages in terms of future format extensibility, without breaking file support in old parsers.

  • MKVMatroska格式中的一种后缀,是人们对Matroska的惯称
  • MKVMatroska是一种基于EBML语言(XML的二进制衍生格式,详见 EBML)的音视频封装格式
  • MKV并不是某种音频或视频格式,而是对多个音视频流的封装存储(详见 封装
  • MKV是一种面向存储的封装格式(类似.avi .mov .mp4,区别.flv .ts
  • MKV完全开源,项目地址:Matroska-Org/libmatroska
  • EBML项目地址:Matroska-Org/libebml

2 How MKV

2.1 Diagram - 文件结构

Simple Representation of a Matroska File

注:各段不是必须存在,也不仅限于上述种类,图中比例与实际数据量无关,各段详细结构参见:Detailed Diagram

2.2 Specifications - 规格草案

此处只记录该草案主要内容:

  1. EBML原理介绍 // 基础数据类型等
  2. 基础语义元素 // 名称、标志位、参数等
  3. 附录 // 使用语言、块结构等

具体参数要求详见 Specification Notes 以及 EBML Elements Order Guidelines.

2.3 Codec Specs - 编解码器说明

For each TrackEntry inside matroska, there has to be a CodecID defined. This ID is represent the codec used to encode data in the Track. The codec works with the coded data in the stream, but also with some codec initialisation. There are 2 different kind of codec "initialisation" :

  • CodecPrivate in the TrackEntry
  • CodecState in the BlockGroup

Each of these elements contain the same kind of data. And these data depend on the codec used.

对于各种codecMKV只需要其提供一个基本的CodecID用于标识,并允许其根据需要定制初始化部分。
个人理解MKV不负责编解码器的细节,它的作用只是向播放器解释流的类型,以及向解码器传递所需的信息。在播放过程中需要的信息都会从标签中找到,即使什么都没有提供也只是降低了性能。

2.4 Video Tags Example - 视频标签

该部分以及 Matroska Test Suite 应该说都是 Matroska 对视频质量提升的一种建议。

Video content usually doesn't have tags in the file. But that doesn't mean it's a good thing. Here are some real-life examples where it makes sense to have tags. As for audio you can have all video parts of a bigger ensemble in the same file or in smaller files.

常规视频中很少包含(现在多了)一些与视频内容有关的“非必要”标签,但实际上这些标签还是很有意义的。MKV提供了视频标签的支持,并给出了一些范例。(而在 Matroska Test Suite 中主要是对视频自测的一些内容)

3 修改MKV支持AVS2

  1. 想要在MKV中加入新的codec支持第一部应该是加入对应的描述,即CodecID,则首先应该向MKV标准提交相应的CodecID申请,提交的地址:Matroska-Org/matroska-specification

  2. 确定使用的CodecID后,在FFmpegVLC中,分别找到MKV的编解码器描述符定义位置:ffmpeg/libavformat/matroska.cvlc/modules/demux/mkv/matroska_segment_parse.cpp,在其中加入Mkv_CodecID => Player_CODEC_ID的对应关系

  3. 重新编译后测试ffmpeg的支持(使用版本为FFmpegAVS2):

./ffmpeg -i test.avs2 -c:v copy test.mkv

重新编译后测试VLC支持(使用版本为之前自己改的VLC-AVS2):直接播放 test.mkv

播放截图


结果还是很不错的,单纯从效果看的话。视频压的很短,目前还缺乏充足的测试(跳转、同步等等)。

但想来想去还是有不少问题:

  • 只加入CodecID就能播放新编码了?
    当然不,加入codec体系间的对应关系只是让播放器顺利地找到了我们之前写的解码器。

  • 能不能向这个MKV添加别的内容?
    应该可以,比如这个序列的描述性的Tags,或者添加用于跳转的Chapters,以及按需求加入Attachment

  • 是不是还需要考虑初始化的问题

  • MKV是按帧存储的吗,如果是,每一帧是怎么存储的,如果不是,又是怎么打的PTS

  • ffmpegcopy过程中到底做了什么,他到底向MKV中写入了什么

  • MKV的测试序列和标准说明应该如何制作与提交

... ...


还是懂得太少。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352