Freigeben über


Ressourcenaustausch-Dateiformatdienste

[Das Feature, das dieser Seite zugeordnet ist, Multimediadatei-E/A-, ist ein Legacyfeature. Es wurde von Source Readerersetzt. Source Reader wurde für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, Quellleser anstelle Multimediadatei-E/A-zu verwenden, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, um die neuen APIs zu verwenden, falls möglich umgeschrieben werden.]

Das bevorzugte Format für Multimediadateien ist das Ressourcenaustauschdateiformat (RIFF). Die RIFF-Datei-E/A-Funktionen funktionieren mit den grundlegenden gepufferten und ungebufferten Datei-E/A-Diensten. Sie können RIFF-Dateien auf die gleiche Weise öffnen, lesen und schreiben wie andere Dateitypen. 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-Größen, die eine Sequenz von 1 bis vier alphanumerischen ASCII-Zeichen darstellen, auf der rechten Seite mit Leerzeichen. Der Datentyp für vierstellige Codes ist FOURCC-. Verwenden Sie das mmioFOURCC- Makro, um vier Zeichen in einen vierstelligen Code zu konvertieren. Verwenden Sie die mmioStringToFOURCC--Funktion, um eine mit Null beendete 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 vierstelligen Code, der den Blockbezeichner angibt
  • Ein Doubleword-Wert, der die Größe des Datenelements im Block angibt
  • Ein Datenfeld

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

Riffabschnitt mit zwei Unterchunks

Ein in einem anderen Abschnitt enthaltener Block ist ein Unterchunk. Die einzigen Blöcke, die Unterchunks enthalten dürfen, sind solche mit einem Blockbezeichner von "RIFF" oder "LIST". Ein Block, der einen anderen Block enthält, wird als übergeordneten Blockbezeichnet. Der erste Block in einer RIFF-Datei muss ein "RIFF"-Block sein. Alle anderen Blöcke in der Datei sind Unterblöcke des "RIFF"-Blocks.

"RIFF"-Blöcke enthalten ein zusätzliches Feld in den ersten vier Byte 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 haben Microsoft Waveform-Audiodateien einen Formtyp von "WAVE".

"LIST"-Blöcke enthalten auch ein zusätzliches Feld in den ersten vier Byte 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"-Block mit einem Listentyp "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 Teilabschnitt enthält (der "LIST"-Block enthält zwei Unterblöcke).

Riffblock mit einem Listenabschnittsbild

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 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 Byte vom Anfang des Abschnitts). Wenn Sie aus einem Block aufsteigen, wird die Dateiposition auf den Speicherort festgelegt, der auf das Ende des Blocks folgt.

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.