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