资源交换文件格式服务
多媒体文件的首选格式是资源交换文件格式 (RIFF) 。 RIFF 文件 I/O 函数适用于基本的缓冲和未缓冲文件 I/O 服务。 可以采用与其他文件类型相同的方式打开、读取和写入 RIFF 文件。 有关 RIFF 的详细信息,请参阅 AVIFile 函数和宏。
RIFF 文件使用四个字符的代码来标识文件元素。 这些代码是 32 位数量,表示一系列 1 到 4 个 ASCII 字母数字字符,右侧填充空格字符。 四个字符代码的数据类型为 FOURCC。 使用 mmioFOURCC 宏将四个字符转换为四个字符的代码。 若要将以 null 结尾的字符串转换为四个字符的代码,请使用 mmioStringToFOURCC 函数。
RIFF 文件的基本构建基块是 一个区块。 区块是多媒体数据的逻辑单元,例如视频剪辑中的单个帧。 每个区块包含以下字段:
- 指定区块标识符的四个字符代码
- 指定区块中数据成员大小的双字值
- 数据字段
下图显示了包含两个子项的“RIFF”区块。
另一个区块中包含的区块是 子丘克。 允许包含子丘克的唯一区块是区块标识符为“RIFF”或“LIST”的区块。 包含另一个区块的区块称为 父区块。 RIFF 文件中的第一个区块必须是“RIFF”区块。 文件中的所有其他区块都是“RIFF”区块的子区块。
“RIFF”区块在数据字段的前四个字节中包含一个附加字段。 此附加字段提供字段的 窗体类型 。 表单类型是一个四字符代码,用于标识存储在文件中的数据的格式。 例如,Microsoft 波形音频文件的窗体类型为“WAVE”。
“LIST”区块还包括数据字段的前四个字节中的附加字段。 此附加字段包含字段 的列表类型 。 列表类型是标识列表内容的四个字符代码。 例如,列表类型为“INFO”的“LIST”区块可以包含提供版权和创建日期信息的“ICOP”和“ICRD”区块。 下图显示了包含“LIST”区块的“RIFF”区块,另一个子区块 (“LIST”区块包含两个子) 。
多媒体文件 I/O 服务包括两个可用于在 RIFF 文件中的区块之间导航的函数: mmioAscend 和 mmioDescend。 可以将这些函数用作高级搜寻函数。 当下降到区块中时,文件位置将设置为区块的数据字段, (块) 开头的 8 个字节。 对于“RIFF”和“LIST”区块,文件位置设置为表单类型或列表类型之后的位置, (块) 开头的 12 个字节。 从区块中升出时,文件位置将设置为区块末尾后的位置。
若要创建新区块,请使用 mmioCreateChunk 函数在打开的文件中的当前位置写入区块标头。 mmioAscend、mmioDescend 和 mmioCreateChunk 函数使用 MMCKINFO 结构指定和检索有关“RIFF”区块的信息。