嵌入式的RIFF 块(上)
扫描二维码
随时随地手机看文章
RIFF块(Resource Interchange File Format Chunk)是资源交换文件格式的核心组成单元,作为一种标准化的“标记区块”存储结构,它为多媒体数据的有序组织与跨平台交互提供了基础框架。这种由微软与IBM于1991年随Windows 3.1一同推出的技术方案,灵感源自电子艺界1985年为Amiga平台设计的IFF(Interchange File Format)格式,却针对x86处理器架构优化了字节序——采用小端序存储多字节整数,与IFF的大端序形成区分,也因此诞生了支持大端序的RIFX变体格式,以适配不同硬件环境。RIFF块的核心设计理念是“以块为单位封装数据与元信息”,通过统一的结构规则,让音频、视频、图像等各类数据都能被标准化存储与解析,这也使其成为WAV、AVI、ANI等经典多媒体格式的底层架构,即便在现代,WebP图片格式等仍沿用其核心设计思路。
RIFF块的结构具备极强的规范性与灵活性,其基础架构可概括为“标识-大小-数据”的三段式结构,而顶层RIFF块则在此基础上增加了文件类型标识,形成“RIFF-文件大小-文件类型-数据”的完整形态。其中,所有标识均采用四字符码(FOURCC),这是由四个ASCII字符组成的32位无符号整数,例如顶层块的“RIFF”标识、WAV文件的“WAVE”类型标识、音频格式信息的“fmt ”标识(末尾含空格)以及数据存储的“data”标识,这些四字符码成为解析器快速识别数据类型的“钥匙”。数据大小字段始终占用4字节,其值仅表示后续数据部分的长度,不包含标识和大小字段本身的字节数——以顶层RIFF块为例,文件大小值等于文件类型标识与后续所有数据的总长度,而普通子块的大小值则直接对应其数据内容的字节数。此外,为保证数据对齐,块数据部分会自动填充至最近的偶数字节边界,这种细节设计确保了不同设备读取时的兼容性。
RIFF块的组织形式呈现树状层级结构,顶层仅存在一个RIFF块,其数据部分可嵌套多个子块,包括普通数据块(Chunk)和列表块(LIST)两类核心单元。列表块以“LIST”为四字符码标识,自身又包含列表大小、列表类型和列表数据,能够将相关子块归类整合,例如AVI文件中的“hdrl”列表块专门存储媒体流格式信息,“movi”列表块则封装音视频数据,这种分类嵌套让复杂多媒体文件的结构更清晰。普通数据块则直接承载具体数据或元信息,以WAV文件为例,其RIFF块下必含“fmt ”和“data”两个核心子块:“fmt ”块存储音频格式参数,如采样率、声道数、位深等,标准PCM格式下该块大小通常为16字节,部分扩展格式会增至18字节;“data”块则存储未经压缩的PCM音频原始数据,而非PCM格式的WAV文件还会额外增加“fact”可选块,记录数据压缩相关的关键信息。这种模块化设计让RIFF格式既能满足简单数据存储需求,也能支撑多流、多类型数据的复杂组合。
四字符码(FOURCC)是RIFF块体系的灵魂所在,它不仅定义了块的类型,更实现了数据类型的精准区分与扩展。除了常见的“RIFF”“WAVE”“fmt ”“data”等标识,不同应用场景还衍生出丰富的专用四字符码:AVI文件中“avih”标识对应视频主头部信息,“strh”标识存储流头部数据,“strf”标识记录流格式细节;ADPCM编码的音频文件会出现“smpl”“wsmpl”等专用块标识;而RF64格式为突破4GB文件大小限制,引入了“ds64”块标识存储64位大小信息。这些四字符码的规范性确保了不同厂商的设备与软件都能遵循统一标准解析数据,而其可扩展性又允许开发者自定义专用块,例如在WAV文件中嵌入版权信息或设备参数的自定义块,不过这种灵活性也可能导致部分非标准块被播放器误判,影响兼容性。





