2010年6月28日星期一

容器格式 Container format

这是一个非常长期的计划,在hanyionet的博客中将陆续对“流媒体技术”的方方面面进行介绍。在这里我试图梳理一些重要的知识点,力求以最简单易懂的语言进行介绍,并且适度提供部分英文特殊名称,以便读者进行进一步的搜索。每篇文章都尽量精简,只对一个小的方面进行探讨,以前也写过一部分关于流媒体技术的文章,以后也会陆续收录到这个专栏里。

容器格式 Container format

一个多媒体容器格式是一种文件格式,它指定如何将数据存储在文件中。它并不指定数据应该如何编码。它也被称为meta-format,因为它不是只存储实际数据,而且描述了数据信息是如何在文件中存储。音频或视频流可以使用许多不同的算法进行编码,但它们只是在很少的几种文件格式中存储。
下图(来自互联网)体现了编解码器Codec和容器格式Container format的关系。

video-container

用于实际上编码/解码视听数据的算法称为编解码器。编解码器Codec是为编码器/解码器的简称。容器中的编解码器的头(Codec header)包含了非常重要的信息对于用来解码视频文件。例如,它描述了有关视频的帧的帧率,分辨率和编码算法等。音频/视频流解码总是根据在编解码器中的资料头结构。不同的容器格式会拥有不同的头结构(header structure)。

 

视频播放器先读取在容器文件编解码器的头信息,然后在视频播放器里找到对应分路器,并初始化将用于视频解码运行时播放视频流的适当的解码器。

 

现在大部分的编解码器信息不是被储存在文件的开头,就是被存储在文件的末尾,在播放视频的时候,作为头信息没有需要作任何的改变。这意味着每当视频播放器遇到一个新的视频文件,视频播放器必须读取头文件信息,然后初始化相应的解码器,最后解码和播放视频。这个过程会导致在视频播放的时候会产生几毫秒的延迟。这就是为什么我们不能播放两个单独视频文件,在同一个视频播放器实例,除非视频播放器同时提供了一个或多个缓冲区,或者相应功能的多个实例编解码器。

没有评论: