当前位置:文档之家› 视频文件格式和视频编码方式区别

视频文件格式和视频编码方式区别

目前网上的各种视频格式可以说就是泛滥成灾,加上各个PMP(Portable Media Player,便携式媒体播放器)生产厂家的对自己产品在功能方面的炒作,使得很多人对视频格式的名称都就是一头的雾水。

经常有些童鞋问我类似下面的问题。

A问我说:“我的MP4分明写着能播放AVI不?为什么这一个AVI文件就播放不了?”B问:“我的MP4支持Mpeg-4啊,为什么Mp4文件不能播放呢?”好的,下面我从最基本的概念给大家解释一下,顺便回答这两个问题首先大家要清楚两个概念,视频文件格式与视频编码方式。

视频文件格式一般情况下从视频文件的后缀名就能瞧出来,比如AVI,Mp4,3gp,mov,rmvb 等等。

这些格式又叫做容器格式(container format),顾名思义就就是用来装东西的,您可以把它想象成为一个便当盒,或者野餐篮(兄弟,您没吃早饭吧)。

通常我们从网上下载的电影都就是有声音的(废话,难道您只瞧默片!众人扔香蕉皮),所以容器格式中一般至少包含有两个数据流(stream),一个视频流,一个音频流,就好比就是一个便当盒里装着的配菜与米饭。

视频编码方式则就是指容器格式中视频流数据的压缩编码方式,例如Mpeg-4,H、264,H、263,等等。

而视频数据采用了何种编码方式就是无法单单从文件格式的后缀上瞧出来的。

就就是说您无法从一个盖着盖子的便当盒外面瞧出里面装了什么配菜。

如果您想播放一个视频文件,第一步您的播放器(不论就是软件的还就是硬件的)要能够解析相应的容器格式,这一步也叫做解复用(demux),第二步您的播放器要能够解码其中所包含视频流与音频流。

这样影片才能播放出来。

打个不太恰当的比方,播放器好比您雇用的一个试菜员,由她来品尝便当(视频文件),然后告诉您便当里装了什么东西。

(没天理阿!我想自己吃,好的当然可以,0x00 00 01 B6 05 FF 36 1A 50 …… ……, 俄~)所以试菜员首先要懂得如何打开便当盒,还要知道吃的出来便当盒里装了什么配菜,这样您才能获得您想要的信息。

回过头来瞧前面的两个问题,用以上的比喻翻译一下。

问题A,我的试菜员能打开AVI这种便当的,为什么我不能知道里面装了什么?回答很简单,虽然她能够打开便当,但就是吃不出里面的东西就是什么。

理论上没有一个播放器能够播放所有的AVI格式的电影,因为您不知道我会往里面放什么配菜。

问题B,我的试菜员吃过Mpeg-4这种牛排阿,为什么不能打开Mp4这种便当盒呢?这个问题通过翻译之后瞧起来已经不就是问题了,Mpeg-4就是视频编码方式,而Mp4就是容器格式,两者本来就不就是一个范畴里的东西。

好了下面简单介绍一下流行的视频格式。

1、AVIAVI就是音频视频交错(Audio Video Interleaved)的英文缩写,它就是Microsoft公司开发的一种数字音频与视频文件格式,允许视频与音频交错在一起同步播放。

AVI文件的格式就是公开并且免费的,大量的视频爱好者在使用这种文件格式。

很多PMP唯一能支持的格式就就是AVI格式,一般的PMP都带有可以转换其她格式视频成为AVI格式的软件。

AVI文件采用的就是RIFF(Resource Interchange ,资源互换文件格式)文件结构,RIFF就是Microsoft公司定义的一种用于管理windows环境中多媒体数据的文件格式。

AVI格式包括2种:AVI 1、0与Open-DML AVI。

AVI 1、0为传统的AVI格式,Open-DML AVI就是AVI 1、0的扩展。

2、ASFASF(Advanced Systems Format)就是一个开放格式,它能依靠多种协议在多种网络环境下支持数据的传送。

ASF就是专为在IP网上传送有同步关系的多媒体数据而设计的文件格式,所以ASF格式的信息特别适合在IP网上传输。

ASF支持任意的压缩/解压缩编码方式的流媒体,并可以使用任何一种底层网络传输协议,具有很大的灵活性。

目前网上以wmv为后缀的文件绝大多数采用的就是ASF格式,WMV就是微软公司视频编码方式而不就是文件格式。

3、Mp4,3gp,movMP4格式就是ISO-IEC Mpeg-4协议Part 14中定义的容器格式。

MP4格式实际上就是对Apple公司开发的MOV格式(也称Quicktime格式)的一种改进,两种格式差别很小。

MOV格式广泛应用于Mac OS操作系统,在Windows操作系统上也可兼容,但就是远比不上AVI格式流行。

而应用于3G手机上的音视频文件格式——3GP其实就是MP4格式的一种简化版本,3GP格式就是一种由3GPP组织制定的多媒体容器格式(container format),3GPP组织形成的通讯协议就是目前全世界手机厂商使用最广的,而3GP格式当然也就是手机视频格式的绝对主流。

MP4,MOV,3GP格式可以说具有相同的文件结构。

另外还有flv,mkv,mpg等等许多其她格式。

介绍完了格式之后,我再给大家说明一下解复用的问题。

前面讲到了容器格式中包含视频与音频数据,怎样将这些数据分离,并送到相应的解码器,而且还要保证音视频的同步性,这就是下面要讨论的话题。

各种格式的解服用并不相同。

首先介绍AVI格式。

(一)AVI格式的结构与解复用AVI文件采用的就是RIFF(Resource Interchange ,资源互换文件格式)文件结构,RIFF就是Microsoft公司定义的一种用于管理windows环境中多媒体数据的文件格式。

AVI格式包括2种:AVI 1、0与Open-DML AVI。

AVI 1、0为传统的AVI格式,Open-DML AVI就是AVI 1、0的扩展。

构造AVI文件的基本单元有2种:列表(LIST)与数据块(Chunk),其基本结构如图所示。

数据块的前4个字节为数据块的ID,接着的4个字节表示数据块的长度。

列表的前4个字节为“RIFF”或者“LIST”。

列表可以嵌套子列表与数据块。

需要注意的就是所给出的数据块与列表的长度就是不包含其前8个字节的。

AVI格式的文件结构见图。

对于AVI 1、0格式,整个文件由一个开头4字节为RIFF,ID 为AVI的列表(简称RIFF AVI列表)组成。

对于Open-DML AVI格式,若尺寸不超过1G,则文件只包含一个RIFF AVI列表;若尺寸超过1G,则包含一个RIFF AVI列表与几个RIFF AVIX 列表。

Open-DML AVI所独有的数据块与列表在图中作了标注。

RIFF-AVI列表包含3个子列表与一个数据块,其ID分别为hdrl,INFO,movi与idx1,其中INFO列表与ID为idx1数据块就是可选的。

而RIFF AVIX只包含一个movi列表以存储数据,头信息全都存储在RIFF AVI中。

下面对RIFF-AVI列表的几个组成部分作详细介绍。

(本文档中有关AVI格式的结构体定义见AviFormat、h,想要源代码的留下邮箱)(1)hdrl列表hdrl列表包含一个ID为avih的数据块,一个ID为odml的列表(仅Open-DML AVI格式具备)及几个ID为strl的列表。

strl列表的个数与文件中所包含流(stream)的个数相等。

avih数据块的包含最大数据率、总帧数、每帧图像的显示时间等数据格式信息。

其具体格式见结构体AVIMAINHEADER。

strl列表至少包含一个ID为strh的数据块与一个ID为strf的数据块,而ID为strd的数据块(保存编解码器需要的一些配置信息,没有固定结构)与ID为strn的数据块(保存流的名字)就是可选的。

strh数据块包含数据流类型、流的编解码方式与每秒采样数等有关流媒体的信息。

其格式见结构体AVISTREAMHEADER。

strf数据块紧跟在strh数据块之后,其结构视流媒体类型而定,如果strh块对应的就是视频数据流,则strf的格式可见结构体VIDEOSTREAMHEADER。

如果strh块对应的就是音频数据流,则strf的格式可见结构体AUDIOSTREAMHEADER。

odml列表中包含文件总帧数等信息,具体格式见结构体AVIEXTHEADER。

indx数据块包含文件的索引数据,用于播放过程中进度条的拖动。

其结构可能为结构体AVISUPERINDEX, AVIFIELDINDEX,AVISTDINDEX三者中的一种。

值得注意的就是avih数据块中提供的总帧数为所在的RIFF AVI列表包含的数据。

而odml列表给出的总帧数则就是所有的RIFF AVI列表与RIFF AVIX列表包含数据帧数之与。

若文件不含RIFF AVIX列表,则两个值相等。

(2)movi列表movi列表可包含音频,视频,字幕或索引数据块。

音频数据块的ID为“##wb”,未压缩的视频数据块的ID为“##db”,经过压缩编码的视频数据块的ID为“##dc”,字幕数据块的ID为“##tx”,索引数据块(仅Open-DML AVI格式具备)的ID为ix##或##ix。

索引数据块可能为结构体AVIFIELDINDEX或AVISTDINDEX。

(“##”为各个流的通道号,可为“00”,“01”等,例如“00dc”表示视频块,“01wb”表示音频块) movi列表有2种结构,第一种如图2、3所示,各种数据块直接存放在列表中。

另一种结构如图所示,movi列表由数个rec列表组成,数据块存放于rec列表中。

(3) idx1数据块idx1索引数据块位于movi数据块之后,包含定义movi数据块的索引数据,就是可选块,用于播放过程中进度条的拖动。

结构可见结构体AVIINDEX。

前面提到了3种索引数据块的结构:AVISUPERINDEX, AVIFIELDINDEX,与AVISTDINDEX。

其中AVISUPERINDEX指向其她的索引数据块;AVISTDINDEX指向movi 列表中存放数据块;AVIFIELDINDEX指向数据块中的某一场(field)数据。

这3种索引块在目前较为少见,一般的AVI文件都就是采用idx1索引块来实现播放过程中进度条的拖动功能的。

相关主题