Ressourcenaustausch-Dateiformatdienste

Das bevorzugte Format für Multimediadateien ist das Ressourcenaustauschdateiformat (RIFF). Die RIFF-Datei-I/O-Funktionen arbeiten mit den grundlegenden pufferten und unbufferten Datei-I/O-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. Diese Codes sind 32-Bit-Mengen, die eine Sequenz von 1 bis vier ASCII-Alphanumerischen Zeichen darstellen, die auf der rechten Seite mit Leerzeichen gepolstert sind. Der Datentyp für vierstellige Codes ist FOURCC. Verwenden Sie das mmioFOURCC-Makro , um vier Zeichen in einen vierstelligen Code zu konvertieren. Wenn Sie eine null-beendete Zeichenfolge in einen vierstelligen Code konvertieren möchten, verwenden Sie die MmioStringToFOURCC-Funktion .

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 Abschnitt enthält die folgenden Felder:

  • Ein vierstelliger Code, der den Blockbezeichner angibt
  • Ein Doubleword-Wert, der die Größe des Datenelements im Abschnitt angibt
  • Ein Datenfeld

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

riff chunk that contains two subchunks image

Ein in einem anderen Abschnitt enthaltener Block ist ein Unterchunk. Die einzigen Blöcke, die Subchunks enthalten dürfen, sind diejenigen mit einem Blockbezeichner von "RIFF" oder "LIST". Ein Block, der einen anderen Block enthält, wird als übergeordneter Block bezeichnet. Der erste Abschnitt in einer RIFF-Datei muss ein "RIFF"-Abschnitt sein. Alle anderen Abschnitte in der Datei sind Teilblöcke des "RIFF"-Abschnitts.

"RIFF"-Abschnitte 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 vierstelliger Code, der das Format der daten identifiziert, die in der Datei gespeichert sind. Beispielsweise verfügen Microsoft Waveform-Audiodateien über einen Formulartyp von "WAVE".

"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 vierstelliger Code, der den Inhalt der Liste identifiziert. Beispielsweise kann ein "LIST"-Abschnitt mit einem Listentyp von "INFO" "ICOP" und "ICRD" Blöcke enthalten, die Copyright- und Erstellungsdatumsinformationen bereitstellen. Die folgende Abbildung zeigt einen "RIFF"-Block, der einen "LIST"-Block und einen anderen Unterchunk enthält (der "LIST"-Block enthält zwei Unterchunks).

riff chunk that contains a list chunk image

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 Suchfunktionen auf hoher Ebene verwenden. Wenn Sie zu einem Block absteigen, wird die Dateiposition auf das Datenfeld des Abschnitts festgelegt (8 Bytes vom Anfang des Blocks). Für "RIFF"- und "LIST"-Blöcke wird die Dateiposition auf den Speicherort festgelegt, der dem Formulartyp oder Listentyp folgt (12 Bytes vom Anfang des Abschnitts). Wenn Sie aus einem Block aufsteigen, wird die Dateiposition nach dem Ende des Abschnitts auf den Speicherort festgelegt.

Verwenden Sie zum Erstellen eines neuen Abschnitts die mmioCreateChunk-Funktion , um einen Blockkopf an der aktuellen Position in einer geöffneten Datei zu schreiben. Die MmioAscend-, mmioDescend- und mmioCreateChunk-Funktionen verwenden die MMCKINFO-Struktur , um Informationen zu "RIFF"-Blöcken anzugeben und abzurufen.