通常在操作系统中,多媒体流是以文件的形式存在的,例如某部电影。多媒体文件一般包含两部分内容:媒体数据(主要指音频或视频)的编码格式和特定的多媒体文件格式。
在一个多媒体文件中,音频数据或视频数据是按照一定的压缩编码标准来编码的,这样会很大程度上降低数据量。音频编码格式包括ac3,ogg,real audio,mp3等;视频编码格式包括mpeg-1/mpeg-2/mpeg-4, h.264, real video,DivX,XVid等。这种编码方式就是我们通常所说的压缩标准。
对于一般多媒体文件,其同时包含按一定编码格式压缩好的音频流和视频流。但这两种压缩码流如何在一个文件中“共存”呢?这就要定义一定的文件"系统"格式:比如音频数据和视频数据如何打包,如何交织在一起,播放的时候如何来做到音视频同步等等。常见的文件系统格式有avi,mpeg,asf,MKV等等。而这些文件系统格式既我们所说的多媒体容器。
很多文件系统格式不限制包含的音频/视频数据到底采用哪种编码格式,这就不难理解“文件容器”一说。比如一个扩展名为avi的文件,它包含的视频压缩格式可能是RGB,YUV,DivX,XVid, mpeg-4,它的音频格式可能是mp3,real audio等,这些都是合法的。
多媒体容器文件格式一般都包括文件头部分、索引部分和多媒体数据部分。
文件头 | 索引 | 多媒体数据 |
文件头部分:文件头说明了多媒体数据符合的压缩标准及规范信息,常见的多媒体数据的压缩标准有:MPEG(Moving Picture Experts Group)系列和H261、H263、H264系列,而多媒体数据的规范信息包括视频的分辨率、帧率,音频的采样率等。
索引部分:由于多媒体数据一般包括音频数据和视频数据,因此多媒体中的音频数据/视频数据通常并不是连续的,而是分成几块存储在文件中,因此需要索引部分建立多媒体数据的存储位置索引,用来记录相应数据块的存储位置即偏移量,由于各数据块的大小可能不同,因此也可能需要在索引部分建立各种多媒体数据块的尺寸大小索引,用来记录相应数据块的尺寸大小。此外在索引部分还建立了其他索引,比如音视频同步索引等等。播放这些多媒体容器文件时,一般是将索引一次性的全部放到内存中,然后在播放中根据操作(快进、快退等)来通过数据索引得到所需的数据。而如何存储这些音视频数据,不同的容器之间也有差异。
多媒体数据部分:即按照某种压缩标准压缩的多媒体数据,包括视频数据、音频数据、文本数据及其他多媒体数据。