为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > AVI文件格式

AVI文件格式

2018-04-11 8页 doc 23KB 60阅读

用户头像

is_196623

暂无简介

举报
AVI文件格式AVI文件格式 AVI是Windows操作系统上最基本的、也是最常用的一种媒体文件(RIFF)格式。多用于音视频捕捉、编辑、回放等应用程序中。通常情况下,一 个AVI文件可以包含多个不同类型的媒体流(典型的情况下有一个音频流和一个视频流),有些更特殊的AVI文件可能包含一个控制道或MIDI声 道作为一个附加的数据流,控制道可以控制如MCI影碟播放器的外部器件,MIDI声道可以为视频流播放背景音乐,要完全播放出这种特殊的数据 流效果,需要播放程序有特殊的插件。 AVI文件类型用一个四字符码‘AVI’来表示。整个AVI文件的结...
AVI文件格式
AVI文件格式 AVI是Windows操作系统上最基本的、也是最常用的一种媒体文件(RIFF)格式。多用于音视频捕捉、编辑、回放等应用程序中。通常情况下,一 个AVI文件可以包含多个不同类型的媒体流(典型的情况下有一个音频流和一个视频流),有些更特殊的AVI文件可能包含一个控制道或MIDI声 道作为一个附加的数据流,控制道可以控制如MCI影碟播放器的外部器件,MIDI声道可以为视频流播放背景音乐,要完全播放出这种特殊的数据 流效果,需要播放程序有特殊的插件。 AVI文件类型用一个四字符码‘AVI’来示。整个AVI文件的结构为:一个RIFF头 + 两个列表+一个可选的索引块。AVI文件的展开结构大致如下。 RIFF ('AVI ' LIST ('hdrl' 'avih'(主AVI信息头数据) LIST ('strl' 'strh' (流的头信息数据) 'strf' (流的格式信息数据) ['strd' (可选的额外的头信息数据) ] ['strn' (可选的流的名字) ] ... ) ... ) LIST ('movi' { SubChunk | LIST ('rec ' SubChunk1 SubChunk2 ... ) ... } ... ) ['idx1' (可选的AVI索引块数据) ] ) 参数说明: RIFF (‘AVI ’…)表示这是个AVI文件。 ‘hdrl’列表是用来定义媒体流格式的,它描述AVI文件中每个媒体流的格式信息。 ‘movi’列表是保存媒体流数据的,就是图像和声音的数据。 说明: ? 列表的结构是以‘LIST’开头,包含listSize、listType、listData。‘LIST’是一个四字符码,表示这是一个列表;listSize占用4字节,记录了整个列 表的大小;listType也是一个四字符码,表示本列表的具体类型;listData就是实际的列表数据。注意listSize值的计算方法为实际的列表数据长度 + 4 (listType域的大小);也就是说listSize值不包括‘LIST’域和listSize域本身的大小。 ckSize、ckData 。ckID是一个表示块类型的四字符码;ckSize占用4个字节,记录了整个块的大小;ckData为实际的块? 块的结构中包含ckID、 数据。ckSize值指的是实际的块数据长度,而不包括ckID域和ckSize域本身的大小。 (1)‘hdrl’列表包含‘avih’块,‘strl’列表,‘strh’块和‘strf’块。 ‘avih’块是‘hdrl’列表下的一个块,用于记录AVI文件的全局信息,比如流的数量、视频图像的宽和高等,可以用一个AVIMAINHEADER数据结构 来描述: typedef struct _avimainheader { FOURCC fcc; //必须为'avih' DWORD cb; //本数据结构的大小,不包括最初的8个字节(fcc和cb两个域) DWORD dwMicroSecPerFrame; //视频帧间隔时间(以毫秒为单位) DWORD dwMaxBytesPerSec; //这个AVI文件的最大数据率 DWORD dwPaddingGranularity; //数据流间隔的大小 DWORD dwFlags; //AVI文件的全局标记,比如是否含有索引块等 DWORD dwTotalFrames; //总帧数 DWORD dwInitialFrames; //为交互格式指定初始帧数(非交互格式应该指定为0) DWORD dwStreams; //本文件包含的流的个数 DWORD dwSuggestedBufferSize; //建议读取本文件的缓存大小(应能容纳最大的块) DWORD dwWidth; //视频图像的宽(以像素为单位) DWORD dwHeight; //视频图像的高(以像素为单位) DWORD dwReserved[4]; //保留 } AVIMAINHEADER; dwFlags参数可以有以下的值。  AVIF_HASINDEX:表示AVI文件有‘idx1’块。  AVIF_MUSTUSEINDEX:应该用索引来决定数据表示的顺序,它表示文件数据块的存放顺序不符合显示顺序。  AVIF_ISINTERLEAVED:表示AVI文件是可交叉存取的。  AVIF_WASCAPTUREFILE:表示AVI文件是一个被特别建立的、为了捕获实时视频的文件。  AVIF_COPYRIGHTED:AVI文件包含版权数据。当这个标识被设定的时候,应用程序不应该让用户复制文件或文件里的数据。  AVIF_ISINTERLEAVED:表示AVI文件已经被交叉存取了,对来自一个光盘的数据,系统读取交叉数据比非交叉数据更有效。 AVIF_WASCAPTUREFILE:表示AVI文件是一个作为捕获实时视频的文件,如果这个标志被设定,应用程序应该在这个标志被改写之前警告用户。 和一个‘strf’块,‘strf’‘strl’列表是‘hdrl’列表的子列表。AVI文件中有多少个媒体流,就对应多少个‘strl’子列表。每个‘strl’子列表至少包含一个‘strh’块 块一定跟随在‘strh’块后面,而‘strd’块(保存编/解码器需要的一些配置信息)和‘strn’块(保存流的名字)是可选的。 ‘strh’块用于说明这个流的头信息,可以用一个AVISTREAMHEADER数据结构来描述。 typedef struct _avistreamheader { FOURCC fcc; //必须为'strh' DWORD cb; //本数据结构的大小,不包括最初的8个字节(fcc和cb两个域) FOURCC fccType; //流的类型:'auds'(音频流)、'vids'(视频流)、 //'mids'(MIDI流)、'txts'(文字流) FOURCC fccHandler; //指定流的处理者,对于音视频来说就是解码器 DWORD dwFlags; //标记:是否允许这个流输出,调色板是否变化, WORD wPriority; //流的优先级(当有多个相同类型的流时,优先级最高的为默认流) WORD wLanguage; DWORD dwInitialFrames; //为交互格式指定初始帧数 DWORD dwScale; //这个流使用的时间尺度 DWORD dwRate; DWORD dwStart; //流的开始时间 DWORD dwLength; //流的长度(单位与dwScale和dwRate的定义有关) DWORD dwSuggestedBufferSize; //读取这个流数据建议使用的缓存大小 DWORD dwQuality; //流数据的质量指标(0,10,000) DWORD dwSampleSize; //Sample的大小 struct { short int left; short int top; short int right; short int bottom; } rcFrame; //指定这个流(视频流或文字流)在视频主窗口中的显示位置 //视频主窗口由AVIMAINHEADER结构中的dwWidth和dwHeight决定 }AVISTREAMHEADER; dwFlags参数可以有如下值。  AVISF_DISABLED:数据流在用户要求放弃时放弃。  AVISF_VIDEO_PALCHANGES:文件中调色板变化。 ‘strf’块是‘strl’列表下的一个块,用于说明流的具体格式。如果是视频流,则使用一个BITMAPINFO数据结构来描述;如果是音频流,则使用一个WAVEFORMATEX数据结构来描述。 (2)‘movi’列表包含‘rec’子列表及相应的数据块。 ‘movi’列表中可以将若干块组成一个‘rec’子列表,在读取数据时,一个‘rec’子列表中的全部块应该一次性地从磁盘读出,这种方法只被用于播放光盘上的交叉存取文件。在‘movi’列表中,块用‘##wb’这样的4字符码标识,wb表示是波形块,还可以是其他类型,##表示媒体流编号。在‘movi’列表中既有音频流,又有视频流,每个流都有自己的块。为了区分不同类型的块,要用一个4字符码来区分,这个4字符码由两个字节的类型码和两个字节的流编号组成,的类型码包括:‘db’(非压缩视频帧)、‘dc’(压缩视频帧)、‘pc’(改用新的调色板)、‘wb’(音缩视频)。如果第一个流是音频,则4字符码为‘00wb’;第二个流是视频,则4字符码为‘00db’或‘00dc’。在‘movi’列表中,一个块对应一个流。 音频块的格式如下。 WAVE Bytes '##wb' BYTE abBytes[]; 视频块有压缩和未压缩之分。未压缩的视频块格式如下。 DIB Bits '##db' BYTE abBits[]; 压缩的视频块格式如下。 Compressed DIB '##dc' BYTE abBits[]; 视频数据块可能是一个与设备无关的位图(DIB),如果未压缩,这个位图的BITMAPINFO结构的biCompression中的值是BI_RGB;如果是压缩的,则biCompression中的值是BI_RGB之外的值。 视频数据块中可能定义一个新的调色板入口来代替现有的调色板,这个调色板的数据结构如下。 typedef struct{ BYTE bFirstEntry; //改变的入口 BYTE bNumEntries; //改变的入口数 WORD wFlags; PALETTEENTRY peNew; //新颜色入口 }AVIPALCHANGE; 还有一种特殊的数据块,用一个4字符码‘JUNK’来表示,它用于内部数据的对齐(填充),应用程序应该忽略这些数据块的内容,光盘上播放文件中包含这些数据块,可以有效的读数据。它也是标准的RIFF类型,格式如下。 AVI Padding ‘JUNK’ BYTE data[]; ’idx1’是一个块结构,用中括号表示可选。 ‘idx1’这个索引块为AVI文件中每一个媒体数据块进行索引,并且记录它们在文件中的偏移(可能相对于‘movi’列表,也可能相对于AVI文件开头)。索引信息可以用一个数据结构来描述。 typedef struct _avioldindex { FOURCC fcc; //必须为‘idx1’ DWORD cb; //本数据结构的大小,不包括最初的8个字节(fcc和cb两个域) struct _avioldindex_entry { DWORD dwChunkId; //本数据块的四字符码 DWORD dwFlags; //说明本数据块是不是关键帧、是不是‘rec ’列表等信息 DWORD dwOffset; //本数据块在文件中的偏移量 DWORD dwSize; //本数据块的大小 } aIndex[]; //这是一个数组~为每个媒体数据块都定义一个索引信息 } AVIOLDINDEX; dwFlags参数可以有下面值。  AVIIF_KEYFRAME:表示视频流中的关键帧,关键帧在解压缩时不使用前面的视频信息。  AVIIF_NOTIME:表示一个数据块不影响视频流的时间安排。  AVIIF_LIST:目前的数据块是一个LIST数据块,使用dwChunkId来识别类型。 如果文件是可交叉存取的,索引会为每个‘rec’建立aIndex结构,并将dwFlags设为AVIIF_LIST。
/
本文档为【AVI文件格式】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索