Microsoft führte mit den Multimediaerweiterungen für Windows 3.1 ein Dateiformat ein, das noch heute angewendet wird: das Resource Interchange File Format (RIFF). Es dient dazu, beliebige Multimedia-Ressourcen zu speichern. Beispiele für solche Daten wären etwa Klänge (*.wav-Dateien), Bildersammlungen oder Videos, letztere bilden unter gewissen Voraussetzungen eine AVI Datei (Audio-Video Interleaved). Interleaved bedeutet in diesem Zusammenhang, daß Audio-und Videodaten in mehreren verschachtelten Einheiten, sogenannten Streams, gespeichert werden können.
Die einfachste Form einer AVI Datei wäre ein einziger Videostream, meistens wird man aber dazu noch Audio-Informationen mit abspeichern wollen, im allgemeinen ist es möglich, auch spezielle Multimedia-Sequenzen wie etwa einen MIDI- Track als zusätzlichen Datenstream in einer AVI-Datei aufzunehmen. Um Audioinformationen in Stereoton zu sichern, benötigt man dazu nur einen Stream, genauso als würde nur Mono gespeichert werden. Einen Controll-Track, um einen externen MCI-Videodisc-Player zu steuern, könnte man auch installieren. Für den Einsatz solcher speziellen Sequenzen ist dann allerdings speziell dafür entwickelte Software erforderlich. Wir werden hier nur AVI-Files behandeln, die Audio-Videoinformationen beinhalten. Wer Interesse an solchen zusätzlichen Möglichkeiten hat, muß sich mit jeder Anwendung im einzelnen auseinandersetzen.
Wie oben erwähnt, ist das AVI-Format eine spezielle Erscheinungsform des RIFF, darum ist es nützlich, den Aufbau der allgemeineren Form kennenzulernen, der sich in der speziellen widerspiegelt. RIFF-Dateien haben immer dieselbe Struktur, damit sie problemlos verarbeitet werden können. Vergleichbar mit globalen und lokalen PASCAL-Prozeduren bestehen RIFF-Dateien aus einem sogenannten Chunk (engl.: Klumpen, Happen, globale Prozedur), der wiederum beliebig viele ineinander verschachtelte Subchunks (lokale Prozeduren) enthalten kann. Der allgemeine Aufbau eines solchen (SUB)Chunks besteht aus drei Einträgen:
Für den Fall, daß die Länge der Daten in Byte ungerade ist, wird rechts ein Füllbyte angehängt. Dem ID kann man entnehmen, um welche Art von Daten es sich handelt. Er ist als FOURCC (Four Character Code) gespeichert, wobei die vier Byte als ASCII Zeichen (Character) interpretiert werden. Der einzige ID mit dem ein RIFF Chunk beginnen kann, ist `RIFF`, d.h jede RIFF Datei fängt mit den Bytes 0x52, 0x49, 0x46 und 0x46 an. Unterschiede können dann nur noch in den ID's der Subchunks auftreten. Hat eine Datenform einen ID mit weniger als vier ASCII-Zeichen, wird rechts mit Leerzeichen aufgefüllt.
Es ist möglich sich FOURCC IDīs (bestehend aus Großbuchstaben) bei Microsoft registrieren zu lassen, der Lizenznehmer muß dann zu seinem ID eine eindeutige Spezifikation des Formates der abgelegten Daten angeben. Die Registration muß bei [MSC] durchgeführt werden.
Kleinbuchstaben werden bei FOURCCīs verwendet, die zu Subchunks gehören. Es kann durchaus passieren, daß Chunks mit verschiedenen IDīs Subchunks haben, deren IDīs identisch sind. Dies ist möglich, da die Interpretation der Daten innerhalb der Subchunks nur im Zusammenhang mit denen des übergeordneten Chunks vollzogen wird.
Innerhalb einer RIFF-Datei werden immer mindestens zwei Chunks vorhanden
sein: ein RIFF und ein LIST-Chunk. Schon in den ersten vier Byte der Daten
(Offset 8...12 der RIFF-Datei, dem sogenannten Form Type), wird die weitere
Form der Daten angegeben. Auch hier verwendet man wieder den FOURCC,
erwartungsgemäß trifft man an dieser Stelle bei einer AVI-Datei auf die
Zeichen 'AVI '. Nach dem Form Type kommen dicht an dicht die restlichen Chunks
der RIFF-Datei. Wie oben erwähnt ist immer auch noch ein spezieller Chunk,
der LIST-Chunk, enthalten. Sein ID ist 'LIST'. Die Daten eines LIST-Chunk
bestehen aus einer Typdefinition der Liste (Byte 0...3 der Daten des LIST
Chunk als FOURCC), den sogenannten List Type, gefolgt von aneinandergereihten
Chunks.
Beispiel für eine einfache RIFF-Struktur:
ID:[RIFF] Size:0x0000220 Form Type = [DEMO] ID:[LIST] Size:0x0000214 List Type = [xyz ] ID:[abcd] Size:0x0000100 ID:[fghi] Size:0x0000100.