资源交换文件格式服务

多媒体文件的首选格式为资源交换文件格式 (RIFF) 。 RIFF file i/o 函数适用于基本的缓冲和无缓冲文件 i/o 服务。 您可以用与其他文件类型相同的方式打开、读取和写入 RIFF 文件。 有关 RIFF 的详细信息,请参阅 AVIFile 函数和宏

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

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

  • 指定块区标识符的四字符代码
  • 指定块区中数据成员的大小的双精度值
  • 数据字段

下图显示了包含两个 subchunks 的 "RIFF" 块区。

包含两个 subchunks 图像的 riff 块

其他块区中包含的块区是一个 subchunk。 允许包含 subchunks 的块仅限具有 "RIFF" 或 "LIST" 区块标识符的块。 包含其他块区的区块称为 父区块。 RIFF 文件中的第一个块区必须是 "RIFF" 块区。 文件中的所有其他区块都是 "RIFF" 块区的 subchunks。

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

"列表" 区块还在数据字段的前四个字节中包含附加字段。 此附加字段包含字段的 列表类型 。 列表类型是一个由四个字符组成的代码,用于标识列表的内容。 例如,列表类型为 "信息" 的 "列表" 块区可以包含 "ICOP" 和 "ICRD" 块,它们提供版权和创建日期信息。 下图显示了一个 "RIFF" 块,其中包含一个 "LIST" 块,另一个 subchunk ("LIST" 区块包含两个 subchunks) 。

包含列表块图像的 riff 块区

多媒体文件 i/o 服务包括两个可用于在 RIFF 文件中的区块之间导航的函数: mmioAscendmmioDescend。 您可以使用这些函数作为高级查找函数。 当你深入到块区时,文件位置设置为块区的数据字段, () 块块开头的8个字节。 对于 "RIFF" 和 "LIST" 块区,将文件位置设置为从块区开头开始 (12 个字节后的窗体类型或列表类型后面的位置) 。 当你在块区中递增时,文件位置设置为在块区末尾之后的位置。

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