门户网站改版,搬搬屋源码网,电子科技大学网站开发制定合同,海珠区建网站AVI RIFF文件参考 AVI RIFF File Reference 微软AVI文件格式是与捕获#xff0c;编辑和播放音视频流的应用程序一起使用的RIFF文件规范。通常#xff0c;AVI文件包含多个不同类型的数据流。大多数AVI文件同时使用音频和视频流。简单的AVI文件只包含视频数据#xff0c;不包含…
AVI RIFF文件参考 AVI RIFF File Reference 微软AVI文件格式是与捕获编辑和播放音视频流的应用程序一起使用的RIFF文件规范。通常AVI文件包含多个不同类型的数据流。大多数AVI文件同时使用音频和视频流。简单的AVI文件只包含视频数据不包含音频数据。 本节不描述AVI的扩展格式(OpenDML AVI file format extensions),有关这些扩展的更多信息,请查看由OpenDML AVI M-JPEG文件格式小组委员会发布的《OpenDML AVI File Format Extensions》
FOURCCs FOURCC四字符代码是通过连接四个ASCII字符创建的一个32位无符号整数。例如FOURCC值为abcd在小端系统上表示为0x64636261。FOURCC可以包含空格字符所以 abc是一个有效的FOURCC(注意a前面有个空格),AVI文件格式使用FOURCC代码来标识流类型数据块索引项和其他信息。
RIFF文件格式(RIFF File Format) AVI文件格式基于RIFF资源交换文件格式文件格式.每个个RIFF文件都包含一个RIFF头(RIFF header )后面可以跟任意个块(chunk)和表(list)。
RIFF header有下面的格式 RIFF fileSize fileType(data) 其中RIFF是字面上的FOURCC代码RIFFfileSize是一个4字节的值用于指定文件中数据的大小。fileType是一个识别特定文件类型的FOURCC.fileSize 值得大小等于fileType大小加上后面数据(data)的大小,但是不包含‘RIFF’ 和 fileSize 占用的大小。 文件数据可以包含块(chunk)和表(list),它们可以以任意的顺序存放。
块(chunk)的格式 ckID ckSize ckData 其中ckID是一个FOURCC用于标识块中包含的数据ckSize是一个4字节的值用于表示ckData中的数据大小而ckData任意多个字节的数据(最大4G)。这些数据都是以4字节对齐的ckSize的值是ckData中有效数据的大小不包括填充的数据也不包括ckID和ckSize占用的空间(它们两各占用4字节)。
表(list)的格式 LIST listSize listType listData 其中LIST是字面上的FOURCC代码LIST‘listSize占用4个字节表示list的大小listType是一个FOURCC代码listData包含块(chunk)和表(list),它们可以以任意顺序存放。listSize的大小包括listType占用的空间(4字节)加上listData的实际长度但是不包含字符’LIST‘(4字节)和listSize(4字节)的大小。
说明
本节的其余部分使用以下表示法来描述RIFF块 ckID ( ckData ) 块大小是隐含的。 使用这种表示法列表可以表示为 LIST ( listType ( listData ) )
可选元素放在括号中[可选元素]
AVI RIFF Form AVI文件由RIFF头(header)中的FOURCCAVI标识。所有的AVI文件必须包含两个表(list)一个表(list)用来定义数据流的格式一个表(list)用来存放数据流的数据。一个AVI文件可能还包含一个索引表用来描述数据块(data chunck)在文件中的位置。包含这些部分的AVI文件具有以下格式
RIFF (AVI LIST (hdrl ... )LIST (movi ... )[idx1 (AVI Index) ]) hdrl列表是第一需要的LIST块它定义了数据的格式。movi是第二个LIST块它包含AVI数据流中的数据。idx1表包含索引。AVI文件必须保证这三个部分的正确顺序。
注意OpenDML extensions 定义了另外的一种索引它FOURCC的值为indx hdrl和movi列表使用子块来处理他们的数据下面这个例子展示了用来完善这些表(list)的AVI RIFF 扩展块(chunk)
RIFF (AVI LIST (hdrlavih(Main AVI Header)LIST (strlstrh(Stream header)strf(Stream format)[ strd(Additional header data) ][ strn(Stream name) ]...)...)LIST (movi{SubChunk | LIST (rec SubChunk1SubChunk2...)...}...)[idx1 (AVI Index) ])
AVI Main Header avih是hsrl列表的开始主AVI头(Main AVI Header)包含在avih中。Main AVI Header 中包含整个AVI文件的全局信息比如流媒体的个数以及AVI中视频的分辨率(宽度和高度)。头块( main header chunk)包含一个结构体 AVIMAINHEADER
AVI Stream Headers 主头结构(main header.)可以有一个或是多个strl列表每个数据流都需要有strl列表与它对应。每个strl列表包含文件中一个流的信息并且必须包含一个流头部块strh和一个流格式块strf另外strl列表可能包含一个流标题数据块strd和一个流名称块strn。 流头部块strh由AVISTREAMHEADER结构组成。 流格式块strf必须跟在流头部块(strh)的后面流格式块描述流中数据的格式。包含在该块中的数据取决于流类型对于视频流strf的信息是一个BITMAPINFO结构包括调色板信息如果适用。对于音频流strf的信息是WAVEFORMATEX结构。 如果流头数据strd块存在它应该跟在流格式块strf)的后面该块的格式和内容由编解码器驱动程序定义。通常驱动程序使用此信息进行配置。读取和写入AVI文件的应用程序不需要解释strd里的信息他们简单地将它作为内存块与驱动程序进行传输。 可选的strn块包含描述流的以空字符结尾的文本字符串 hdrl列表中的流头结构根据strl块的顺序与movi列表中的流数据相关联。第一个strl块适用于流0第二个适用于流1依此类推。 Stream Data (movi List) 跟在头信息(hdrl 列表)后面的是movi列表movi列表包含数据流中的真实数据——视频帧和音频样本。数据块可以直接驻留在movi列表中或者可以将它们归入rec列表中。rec分组意味着应该一次从磁盘读取分组块适用于交错式从CD-ROM播放的文件。 识别每个数据块的FOURCC包含一个两位数字的媒体流号后跟一个定义该块中信息类型的两字符代码。
Two-character codeDescriptiondbUncompressed video framedcCompressed video framepcPalette changewbAudio data 例如如果媒体流0包含音频则该流的数据块的FOURCC值为00wb。如果媒体流1包含视频则该流的数据块FOURCC值为01db或01dc。视频数据块也可以定义新的调色板条目以在AVI序列期间更新调色板。每个调色板更改块xxpc都包含一个AVIPALCHANGE结构。如果数据流包含调色板更改请在该流的AVISTREAMHEADER结构的dwFlags成员中设置AVISF_VIDEO_PALCHANGES标志。 文本流可以使用任意的双字符代码。 AVI Index Entries
AVI 1.0 index 在movi列表的后面可以有一个索引idx1块。索引包含数据块的列表(list)及其在文件中的位置。它由一个AVIOLDINDEX结构和每个数据块的条目组成,包括rec块.如果文件包含索引请在AVIMAINHEADER结构的dwFlags成员中设置AVIF_HASINDEX标志。
AVI 2.0 index AVI 2.0索引可以显示为一个单独的块,或者索引段可以在movi块内交错.AVIMETAINDEX结构是索引段和超级索引的基础结构.有关2.0索引的更多信息可以参考由OpenDML AVI M-JPEG问价格式委员会发布的《 OpenDML AVI File Format Extensions》 Other Data Chunks 为了AVI文件数据的对齐可以根据需要插入JUNK块。应用程序应该忽略“JUNK”块的内容。 名字解析
FOURCC: four-character code. a 32-bit unsigned integer created by concatenating four ASCII characters.
hdrl: The first sub-chunk is identified by the hdrl tag. This sub-chunk is the file header and contains metadata about the video, such as its width, height and frame rate.
movi:The second sub-chunk is identified by the movi tag. This chunk contains the actual audio/visual data that make up the AVI movie
idx1:The third optional sub-chunk is identified by the idx1 tag which indexes the offsets of the data chunks within the file.
strh: stream header chunk
strn: stream name chunk
strf: stream format chunk
strd: stream-header data 计划该系列文章包括下面几篇 AVI音视频封装格式学习(一)——微软RIFF文件格式摘要 AVI音视频封装格式学习(二)——AVI RIFF文件参考 AVI音视频封装格式学习(三)——AVI 数据结构解析 AVI音视频封装格式学习(四)——linux系统C语言AVI格式音视频封装应用 Wen Lee 2018.04.01 由于各种原因后续文章内容将更新到公众号本平台将不再做更新。
CSDN上相关文章的测试工程代码也统一放到了公众号上可以免费免积分下载
有需要的可以扫下面二维码转到公众号欢迎关注欢迎提出您宝贵的意见和建议
liwen01 2022.08.21