以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- AVI文件格式 (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=47093) |
-- 作者:卷积内核 -- 发布时间:5/18/2007 2:41:00 PM -- AVI文件格式 AVI(Audio Video Interleaved的缩写)是一种RIFF(Resource Interchange File Format的缩写)文件格式,多用于音视频捕捉、编辑、回放等应用程序中。通常情况下,一个AVI文件可以包含多个不同类型的媒体流(典型的情况下有一个音频流和一个视频流),不过含有单一音频流或单一视频流的AVI文件也是合法的。AVI可以算是Windows操作系统上最基本的、也是最常用的一种媒体文件格式。
RIFF (‘AVI ’
|
-- 作者:卷积内核 -- 发布时间:5/18/2007 2:41:00 PM -- 首先,RIFF (‘AVI ’…)表征了AVI文件类型。然后就是AVI文件必需的第一个列表——‘hdrl’列表,用于描述AVI文件中各个流的格式信息(AVI文件中的每一路媒体数据都称为一个流)。‘hdrl’列表嵌套了一系列块和子列表——首先是一个‘avih’块,用于记录AVI文件的全局信息,比如流的数量、视频图像的宽和高等,可以使用一个AVIMAINHEADER数据结构来操作:
typedef struct _avimainheader {
|
-- 作者:卷积内核 -- 发布时间:5/18/2007 2:41:00 PM -- 然后,就是一个或多个‘strl’子列表。(文件中有多少个流,这里就对应有多少个‘strl’子列表。)每个‘strl’子列表至少包含一个‘strh’块和一个‘strf’块,而‘strd’块(保存编解码器需要的一些配置信息)和‘strn’块(保存流的名字)是可选的。首先是‘strh’块,用于说明这个流的头信息,可以使用一个AVISTREAMHEADER数据结构来操作:
typedef struct _avistreamheader {
|
-- 作者:卷积内核 -- 发布时间:5/18/2007 2:41:00 PM -- 然后是‘strf’块,用于说明流的具体格式。如果是视频流,则使用一个BITMAPINFO数据结构来描述;如果是音频流,则使用一个WAVEFORMATEX数据结构来描述。
typedef struct _avioldindex {
注意:如果一个AVI文件包含有索引块,则应在主AVI信息头的描述中,也就是AVIMAINHEADER结构的dwFlags中包含一个AVIF_HASINDEX标记。
|
-- 作者:卷积内核 -- 发布时间:5/18/2007 2:43:00 PM -- AVI(Audio/Video Interleaved)文件是MS-Windows的视频文件,其文件扩展名为“.AVI”。它一般由三部分构成:信息区、数据区和索引区(可缺省),即两个LIST快和一个idx1块。这些区域,通常由一些子块组成,它们多用于为播放软件提供更为系统的数据信息;或为播放时进行快速数据定位及播放,并提供详细资料和识别手段(关于“区域”与“子块”具体包容关系请见图6)。 说明:本例由“四部分”构成,即在两个LIST块中间夹了个JUNK块。这个JUNK块纯属人为添加的自定义块,即在AVI文件中从未有对此块的定义。换句话说,我们也可以添加自己的决,只要遵循如下原则:在这三个标准块其中的某个后面,定义一个四字节的块识别码(不要与本文用到的识别码相同,最好字母用大写),紧跟一个长整数来表示你自定义的块的大小,随后便可以在定义的大小范围内写入你想表述的信息。同样,在这三个标准块的内部,也可以用上述方法添加自定义干块。 注:下文的说明内容部分取自华中理工大学出版的<>一文和<>的HELP文件。 以下就是作为例子的文件内容(数据D)及AVI文件标准结构图。 00000000-00000003 多媒体文件识别码:RIFF |
-- 作者:卷积内核 -- 发布时间:5/18/2007 2:43:00 PM -- AVI视频文件 它的英文全称为Audio Video Interleaved,即音频视频交错格式。是将语音和影像同步组合在一起的文件格式。它对视频文件采用了一种有损压缩方式,但压缩比较高,因此尽管面面质量不是太好,但其应用范围仍然非常广泛。AVI支持256色和RLE压缩。AVI信息主要应用在多媒体光盘上,用来保存电视、电影等各种影像信息。 它于1992年被Microsoft公司推出,随Windows3.1一起被人们所认识和熟知。所谓“音频视频交错”,就是可以将视频和音频交织在一起进行同步播放。这种视频格式的优点是图像质量好,可以跨多个平台使用,其缺点是体积过于庞大,而且更加糟糕的是压缩标准不统一,最普遍的现象就是高版本Windows媒体播放器播放不了采用早期编码编辑的AVI格式视频,而低版本Windows媒体播放器又播放不了采用最新编码编辑的AVI格式视频,所以我们在进行一些AVI格式的视频播放时常会出现由于视频编码问题而造成的视频不能播放或即使能够播放,但存在不能调节播放进度和播放时只有声音没有图像等一些莫名其妙的问题,如果用户在进行AVI格式的视频播放时遇到了这些问题,可以通过下载相应的解码器来解决。是目前视频文件的主流。 这种格式的文件随处可见,比如一些游戏、教育软件的片头,多媒体光盘中,都会有不少的 AVI 。 现在,在WINDOWS 95或98里都能直接播放AVI,而且它自己的格式也有好几种,最常见的有 Intel Indeo(R)Video R3.2、Microsoft video 等。 AVI 文件包含三部分:文件头、数据块和索引块。其中数据块包含实际数据流,即图像和声音序列数据。这是文件的主体,也是决定文件容量的主要部分。视频文件的大小等于该文件的数据率乘以该视频播放的时间长度,索引块包括数据块列表和它们在文件中的位置,以提供文件内数据随机存取能力。文件头包括文件的通用信息,定义数据格式,所用的压缩算法等参数。 |
-- 作者:hooyean -- 发布时间:1/31/2008 11:52:00 AM --
|
-- 作者:卷积内核 -- 发布时间:1/31/2008 4:30:00 PM -- // AVIMAINHEADER flags public static readonly int AVIF_HASINDEX = 0x00000010; // Index at end of file? public static readonly int AVIF_MUSTUSEINDEX = 0x00000020; public static readonly int AVIF_ISINTERLEAVED = 0x00000100; public static readonly int AVIF_TRUSTCKTYPE = 0x00000800; // Use CKType to find key frames public static readonly int AVIF_WASCAPTUREFILE = 0x00010000; public static readonly int AVIF_COPYRIGHTED = 0x00020000; // AVISTREAMINFO flags public static readonly int AVISF_DISABLED = 0x00000001; public static readonly int AVISF_VIDEO_PALCHANGES = 0x00010000; // AVIOLDINDEXENTRY flags public static readonly int AVIIF_LIST = 0x00000001; public static readonly int AVIIF_KEYFRAME = 0x00000010; public static readonly int AVIIF_NO_TIME = 0x00000100; public static readonly int AVIIF_COMPRESSOR = 0x0FFF0000; // unused? // TIMECODEDATA flags public static readonly int TIMECODE_SMPTE_BINARY_GROUP = 0x07; public static readonly int TIMECODE_SMPTE_COLOR_FRAME = 0x08; // AVI stream FourCC codes public static readonly int streamtypeVIDEO = RiffParser.ToFourCC("vids"); public static readonly int streamtypeAUDIO = RiffParser.ToFourCC("auds"); public static readonly int streamtypeMIDI = RiffParser.ToFourCC("mids"); public static readonly int streamtypeTEXT = RiffParser.ToFourCC("txts"); // AVI section FourCC codes public static readonly int ckidMainAVIHeader = RiffParser.ToFourCC("avih"); public static readonly int ckidODML = RiffParser.ToFourCC("odml"); public static readonly int ckidAVIExtHeader = RiffParser.ToFourCC("dmlh"); public static readonly int ckidStreamList = RiffParser.ToFourCC("strl"); public static readonly int ckidAVIStreamHeader = RiffParser.ToFourCC("strh"); public static readonly int ckidStreamFormat = RiffParser.ToFourCC("strf"); public static readonly int ckidAVIOldIndex = RiffParser.ToFourCC("idx1"); |
-- 作者:littlefish83 -- 发布时间:3/19/2008 2:48:00 PM -- 视频的文件格式相对来说太复杂了。 LZ什么时候介绍一下JPEG格式啊。 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
82.031ms |