资源交换文件格式服务

多媒体文件的首选格式是 (RIFF) 的资源交换文件格式。 RIFF 文件 I/O 函数适用于基本的缓冲和未缓冲文件 I/O 服务。 可以像其他文件类型一样打开、读取和写入 RIFF 文件。 有关 RIFF 的详细信息,请参阅 AVIFile 函数和宏

RIFF 文件使用四个字符的代码来标识文件元素。 这些代码是 32 位数量,代表一到四个 ASCII 字母数字字符的序列,用空格字符填充右侧。 四个字符代码的数据类型为 FOURCC。 使用 mmioFOURCC 宏将四个字符转换为四个字符的代码。 若要将以 null 结尾的字符串转换为四个字符的代码,请使用 mmioStringToFOURCC 函数。

RIFF 文件的基本构建基块是 区块。 区块是多媒体数据的逻辑单元,例如视频剪辑中的单个帧。 每个区块包含以下字段:

  • 指定区块标识符的四个字符代码
  • 一个双字值,该值指定区块中的数据成员的大小
  • 数据字段

下图显示了一个包含两个子实例的“RIFF”区块。

riff chunk that contains two subchunks image

另一个区块中包含的区块是子 区块。 允许包含子子库的唯一区块是具有区块标识符为“RIFF”或“LIST”的区块。 包含另一个区块的区块称为 父区块。 RIFF 文件中的第一个区块必须是“RIFF”区块。 文件中所有其他区块都是“RIFF”区块的子区块。

“RIFF”区块在数据字段的前四个字节中包含一个附加字段。 此附加字段提供字段的 窗体类型 。 表单类型是一个四个字符的代码,用于标识存储在文件中的数据的格式。 例如,Microsoft 波形音频文件的格式为“WAVE”。

“LIST”区块还包括数据字段的前四个字节中的其他字段。 此附加字段包含字段 的列表类型 。 列表类型是标识列表内容的四个字符代码。 例如,具有列表类型的“INFO”的“LIST”区块可以包含提供版权和创建日期信息的“ICOP”和“ICRD”区块。 下图显示了一个包含“LIST”区块的“RIFF”区块,另一个子分块 (“LIST”区块包含两个子分块) 。

riff chunk that contains a list chunk image

多媒体文件 I/O 服务包括两个函数,可用于在 RIFF 文件中的区块之间导航: mmioAscendmmioDescend。 可以将这些函数用作高级搜寻函数。 当降到区块中时,文件位置将设置为区块 (块开头的 8 个字节的数据字段) 。 对于“RIFF”和“LIST”区块,文件位置设置为格式类型或列表类型之后的位置, (区块开头的 12 个字节) 。 当从区块中升出时,文件位置将设置为区块末尾之后的位置。

若要创建新区块,请使用 mmioCreateChunk 函数在打开的文件中当前位置写入区块标头。 mmioAscend、mmioDescendmmioCreateChunk 函数使用 MMCKINFO 结构指定和检索有关“RIFF”区块的信息。