Resource Interchange File Format Services

Das bevorzugte Format für Multimediadateien ist das Ressourcenaustauschdateiformat (Resource Interchange File Format, RIFF). Die RIFF-Datei-E/A-Funktionen funktionieren mit den grundlegenden gepufferten und nicht gepufferten Datei-E/A-Diensten. Sie können RIFF-Dateien auf die gleiche Weise wie andere Dateitypen öffnen, lesen und schreiben. Ausführliche Informationen zu RIFF finden Sie unter AVIFile-Funktionen und -Makros.

RIFF-Dateien verwenden vierstellige Codes, um Dateielemente zu identifizieren. Bei diesen Codes handelt es sich um 32-Bit-Mengen, die eine Sequenz von ein bis vier alphanumerischen ASCII-Zeichen darstellen, die auf der rechten Seite mit Leerzeichen versehen sind. Der Datentyp für Vierzeichencodes ist FOURCC. Verwenden Sie das Makro mmioFOURCC , um vier Zeichen in einen vierstelligen Code zu konvertieren. Verwenden Sie die Funktion mmioStringToFOURCC , um eine NULL-Zeichenfolge in einen vierstelligen Code zu konvertieren.

Der grundlegende Baustein einer RIFF-Datei ist ein Block. Ein Block ist eine logische Einheit von Multimediadaten, z. B. ein einzelner Frame in einem Videoclip. Jeder Block enthält die folgenden Felder:

  • Ein vierstellige Code, der den Blockbezeichner angibt
  • Ein Doubleword-Wert, der die Größe des Datenmembers im Block angibt
  • Ein Datenfeld

Die folgende Abbildung zeigt einen RIFF-Block, der zwei Teilchunks enthält.

Riffblock, der zwei Unterchunks enthält

Ein in einem anderen Block enthaltener Block ist ein Teilchunk. Die einzigen Blöcke, die Teilchunks enthalten dürfen, sind solche mit dem Blockbezeichner "RIFF" oder "LIST". Ein Block, der einen anderen Block enthält, wird als übergeordneter Block bezeichnet. Der erste Block in einer RIFF-Datei muss ein RIFF-Blöcke sein. Alle anderen Blöcke in der Datei sind Teilchunks des "RIFF"-Blöckes.

"RIFF"-Blöcke enthalten ein zusätzliches Feld in den ersten vier Bytes des Datenfelds. Dieses zusätzliche Feld stellt den Formulartyp des Felds bereit. Der Formulartyp ist ein vierstelligen Code, der das Format der in der Datei gespeicherten Daten identifiziert. Beispielsweise weisen Microsoft Waveform-Audiodateien den Formulartyp "WAVE" auf.

"LIST"-Blöcke enthalten auch ein zusätzliches Feld in den ersten vier Bytes des Datenfelds. Dieses zusätzliche Feld enthält den Listentyp des Felds. Der Listentyp ist ein vierstelligen Code, der den Inhalt der Liste identifiziert. Beispielsweise kann ein "LIST"-Blöcke mit dem Listentyp "INFO" "ICOP" und "ICRD" Blöcke enthalten, die Informationen zum Urheberrecht und Erstellungsdatum bereitstellen. Die folgende Abbildung zeigt einen RIFF-Block, der einen "LIST"-Block und ein weiteres Teilchunk enthält (der "LIST"-Block enthält zwei Unterchunks).

Riffblock, der ein Listenblockbild enthält

Multimediadatei-E/A-Dienste umfassen zwei Funktionen, mit denen Sie zwischen Blöcken in einer RIFF-Datei navigieren können: mmioAscend und mmioDescend. Sie können diese Funktionen als allgemeine Suchfunktionen verwenden. Wenn Sie zu einem Block absteigen, wird die Dateiposition auf das Datenfeld des Blockes (8 Bytes vom Anfang des Blockes) festgelegt. Für "RIFF" und "LIST"-Blöcke wird die Dateiposition auf den Speicherort festgelegt, der dem Formular- oder Listentyp folgt (12 Bytes vom Anfang des Blöckes). Wenn Sie aus einem Block aufsteigen, wird die Dateiposition auf den Speicherort festgelegt, der dem Ende des Blöckes folgt.

Um einen neuen Block zu erstellen, verwenden Sie die mmioCreateChunk-Funktion , um einen Chunkheader an der aktuellen Position in einer geöffneten Datei zu schreiben. Die Funktionen mmioAscend, mmioDescend und mmioCreateChunk verwenden die MMCKINFO-Struktur , um Informationen zu RIFF-Blöcken anzugeben und abzurufen.