Matroska多媒体封装格式的完全演绎1、多媒体文件格式介绍我们先把题目的主题划分成三块:Mastroka、多媒体文件和格式。多媒体文件包括我们常见的音频、视频、字幕、图像等;格式说的是文件编码类型,文件的结构,是对文件编码方式,文件结构的一种约定,便于区分。如同一把钥匙开一把锁,不同的文件要用不同的方法去读,去显示,去写,去打开或运行;Matroska就是论文的中心,是一种格式的名称,就像我们常见的图片格式jpg、音频格式mp3、视频序列串格式tga等。Matroska是一种怎样的多媒体文件格式,要理解它,首先要先明白一个“媒体容器”的词,简单的说就是把多媒体文件给放一起,怎么放一起就要用一个容器。当我们在电脑上播放一个电影的时候,我们并没意识到,实际上我们至少在同时播放一个视频和一个音频。由于同时播放两个文件,比如一个MP3音频文件和一个视频文件,是非常不现实的,因此我们把音频和视频打包到一个文件里,这个文件就叫做容器格式的文件,与压缩文件相类似,我们常见的压缩文件格式有ZIP和RAR。不过容器格式比这个更复杂一些,因为不是所有的视频流格式兼容所有的容器格式。一个视频文件一般包含多个track,而每个视频track(没有音频)又可对应一到多个音频track。这些track又总是相互关联的。每个音频track内部包含标记用于和视频同步。每个track可包括元数据,比如视频track的纵横比(视频长和宽),或者音频track的语言。容器也可以有元数据,比如视频自身的题目,视频的封面,片段号码(用于在电视上展示)等等。但是容器格式文件及其相关软件必须提供许多重要功能,比如在播放时保证音频和视频的时序一致。WinZIP或者WinRAR可以方便地打包多个音视频文件在一起传输,但是它们显然无法解决保证时序播放的问题,所以才衍生出这种容器格式文件,目前比较知名的容器格式包括AVI(.avi)、MPEG(.mpg,.mpeg)、QuickTime(.mov)、RealMedia(.rm)、MP4(.mp4)、Ogm等等。从上面的容器格式,我们应该与我们常说的视频格式区分开。我们常把视频格式等同于容器格式,其实这是不确切。准确的说,像上面所提及的容器格式是一种文件格式,我们电脑上常见的AVI这种文件。而同一种文件格式,如AVI,又分为MPEG-1、MPEG-2、MPEG-4几种视频格式,然后同一种视频格式格式,如MPEG-4又可以使用多种视频编码。所以容器格式并不是让非专业人士头疼的视频编码。多媒体文件格式这种容器特性,我们把它叫做特性,即多媒体封装格式(MultimediaContainerFormat简称MCF、多媒体容器)。所谓封装格式就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,也就是说仅仅是一个外壳,或者大家把它当成一个在视频处理过程中放视频轨和音频轨的文件夹也可以。MCF的文件格式包含着流式传输和广播设备。它并不压缩视频和音频的,它不同于DivX、MP3这类编码格式,但它就像一个容器一样可以把很多的多媒体容纳,它只是为多媒体编码提供了一个“外壳”,例如:MPEG-4(XviD、DivX),AC3,OggVorbis,MP3等。2、Matroska多媒体封装格式介绍2、1Matroska概览Matroska是一种新的多媒体封装格式,它可将多种不同编码的视频及16条以上不同格式的音频和不同语言的字幕流封装到一个MatroskaMedia文件当中!而对于我们以前常见的AVl、VOB、MPEG、OGG等封装格式要么结构陈旧,要么不够开放,正因为如此,才促成了Matroska这类新的多媒体封装格式的诞生。Matroska媒体定义了三种类型的文件:MKV是视频文件,它里面可能还包含有音频和字幕;MKA是单一的音频文件,能够容纳所有支持音频格式,如MP2,MP3,VORBIS,AAC,AC3,DTS...但可能有多条及多种类型的音轨;MKS是字幕文件,所谓“ELEMENTARY”的MATROSKA流,支持任意字幕。这三种文件以MKV最为常见,它可以封装多种流行的视频视频和音频,尤其是主流的Real,并且它还采用了一种更加灵活的框架,叫做EBML(ExtensibleBinaryMetaLanguage),它允许在未来为Matroska增加许多功能(如新的A/Vcodecs(音视频解码器),类DVD目录)而且不破坏向下兼容性,能兼容老的软件、文件,以确保能够支持将来新出现的压缩格式:包含各种支持的音频编码,如MP2,MP3,Vorbis,AAC,AC3,DTS,PCM;还可以包含“任意开关”的srt、ssa、ass等软字幕。Matroska加入AVI所没有的EDC错误检测代码,这意味着即使是没有下载完毕的MKV文件也可以顺利回放,这些对AVI来说完全是不可想象的。虽然Matroska加入了错误检测代码,但由于采用了新的更高效的组织结构,用MKV封装后的电影还是比AVI源文件要小了约1%,这就是说即使加上了多个字幕,MKV文件的体积也不可能比AVI文件大。Matroska支持可变帧率(VFR,即VariableFrameRate)的视频编码,这种VFR视频的帧率是不固定的,它可在动态画面中使用较大的帧率,而在静态画面中使用较小的帧率,这样可以有效的减少视频文件的体积,并改善动态画面的质量。它的作用比目前广泛使用的VBR(可变码率)更为明显。2、2MKV概览Matroska多媒体封装格式以MKV视频文件在应用上更为常见,两年前在网络上视频的传播还很少见到此类格式的视频文件供下载。而现在到主流的影视下载站点,像狗狗影视或者更为专业的影视下载站点,遇上这种格式的视频文件已经是很正常,并且朝着取代之前流行的RMVB视频的趋势发展。以MKV来了解Matroska最有代表性,而且网络上也往往以MKV来指代Matroska。MKV作为Matroska的一个子类文件格式,它继承Matroska多媒体文件的特点,可将多种不同编码的视频及16条以上不同格式的音频和不同语言的字幕流封装到一个MatroskaMedia文件当中,最大的特点就是能容纳多种不同类型编码的视频、音频及字幕流,甚至连非常封闭的RealMedia及QuickTime这类流媒体也被它囊括进去,可以说是对传统媒体格式的一次大颠覆,几乎变成了一个万能的媒体容器。目前它所能封装的视频、音频、字幕类型包括:文件格式编码方式AVI文件包括采用DivX、XviD、3ivX、VP6视频编码,及PCM、MP3、AC3等音频编码的AVIRealMedia文件包括RealVideo和RealAudioQuickTime文件MOV及MP4视频WindowsMedia文件包括ASF、WMV格式MPEG文件:包括MPEG-1、MPEG-2的M1V、M2VOgg/OGM文件包括OggVorbis、OGM、FLAC文件MatroskaMedia文件包括MKV、MKA、MKS文件音频文件WAV、AC3、DTS、MP2、MP3、AAC/MP4字幕文件SRT、USF、SSA/ASS文本字幕、SubVob图形字幕(后缀为IDX、SUB)、BMP图形字幕(以一组BMP图片及时间码构成的字幕)此外,Matroska文件中还可包括章节、标签(Tag)等信息,甚至还可加上附件!Matroska所谓封装AVI、RM、MOV等媒体,但它并不是简单将它们不加改变的合并到Matroska中,而是将它们的音视频流进行了重新组织。3、MKV与传统封装格式的优势3、1MKV的发展历程既然在Matroska出现前已经存在一种非常成熟的容器格式,为什么还要发展Matroska?Matroska较其他的多媒体封装格式具有什么优势?AVI是微软公司在20世纪90年代早期推出的一种音视频容器格式,可以非常灵活地处理当时的各种音视频编码。有必要了解的是,AVI是VFW(VideoForWindows)框架的一部分,非常不幸的是,VFW无法支持音视频编码目前支持的更高级特性,比如动态码率音频编码(VBR)、动态帧率视频编码(VFR)。尽管AVI在90年代中后期扩展了其标准,叫做“OpenDMLAVI”,克服了许多恼人的限制,比如2GB文件大小限制,但仍然无法提供对很多现代压缩格式的兼容,比如开源的OggVorbis音频压缩格式。Matroska跨越了所有的此类障碍,从而提供了对所有可知的音视频格式的支持,因为其采用了一种更加灵活的框架EBML,以确保能够支持将来新出现的压缩格式。这种框架允许增加对容器格式的新特性,同时不破坏原有软件和文件的向后兼容性。在2000年时候,开发者眼见AVI已经时势已去,不能再作长久的发展,于是就开发这个科研项目。原来这个科研项目的开发是始于在“如何成为最佳的视频格式”为议题下进行脑力激荡法的。在那时,这个科研项目只是一个文字档案的。整个开发在2002年12月7日开始,是多媒体封装格式科研计划之一。经过一场的争议后,Matroska决定使用ExtensibleBinaryMetaLanguage(EBML,可扩展的二进制元语言)取代其它二进制格式。EBML语言使用不定长整数,这种方式相对于固定长度的32位/64位字长的整数值更节约空间.放置的位置也不受字节对齐约束..这种长度编码方式来自于UTF-8编码规范.。开发者相信使用EBML有很多优点,例如若将来有新的开发计划发展或改变开发目目标时候,更容易扩充程序。Matroska是一个免费,开源的容器格式,在可扩展的基础上着力于提供老式格式象AVI不具有的许多改进的特性。AVI的出现已经超过了10年,渐渐体现出老态了,除了近年通过VD可以拥有2个音轨,没有其他的改进。Ogm的出现,标志着多音轨格式的出现,可以合成8个以上的音轨,音频上自然也多了ogg这个格式,重要的是可以“内挂”字幕,老外称为“软字幕”,可以任意开关,可以“内挂”8个以上的字幕,美中不足的是仅仅支持srt格式,并且不支持Unicode,对亚洲字符支持严重不足。还有一个就是Chapter功能,可以自定义段落,播放时就可以选择了,越来越像DVD。但是当时的ogm源码是不公开的,就那么几个人在开发,自然进度慢了,几乎陷入了“死亡”。后来宣布公开源码,加入OpenSource行列,重新开始开发。MKV就是在Ogm停滞的那段时间出现的,由俄罗斯的程序员开发的,从一开始就是OpenSource,因此得到了很多其他程序员的帮助,开发速度相当快。3、2AVI封装格式AVI是微软1992年推出用于对抗苹果Quicktime的技术,因为当时还没有流式播放需要,AVI的将索引布置在打包文件的尾部,这就使得AVI封装不能做到流式播放,在用电脑播放AVI封装的高清视频时,会发现,当拨动时间指针后,图像开始播放后若干秒后,才能发出同步声音。尽管国际学术界公认AVI已经属于被淘汰的技术,但是由于windows的通用性,和简单易懂的开发API,还在被广泛使用。AVI的文件结构、分为头部,主体和索引三部分.主体中图像数据和声音数据是交互存放的。从尾部的索引可以索引跳到自己想放的位置。AVI本身只是提供了这么一个框架,内部的图像数据和声音顺据格式可以是任意的编码形式。因为索引放在了文件尾部,所以在播internet流媒体时已属力不从心。很简单的例子,从网络上下载的片子,如果没有下载完成,是很难正常播放出来。另外一个问题是AVI对高码率VBR音频文件支持不好。VBR全称是VariableBitRate,就是动态比特率,可以根据当前的需要定义不同的比特率,避免了浪费,并且提高了利用率。随之问题也就来了,因为容器里的图像和声音是分开的,所以播放时需要一个图像和声音的同步过程,如果CBR音轨的话因为码率是定值,同步不成为问题,可是VBR音轨是不断的在变换,而AVI没有时间戳去让VBR音轨和图像同步,这样就会产生图像声音不同步的问题。后来VirtualDub提出了一种新的方法扩充了AVI对VBR音频的兼容,但是在高码率时会产生丢失数据的问