AVI RIFF-Dateireferenz
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]
Das Microsoft AVI-Dateiformat ist eine RIFF-Dateispezifikation, die für Anwendungen verwendet wird, die Audio-Videosequenzen erfassen, bearbeiten und wiedergeben. Im Allgemeinen enthalten AVI-Dateien mehrere Datenströme verschiedener Arten von Daten. Die meisten AVI-Sequenzen verwenden sowohl Audio- als auch Videostreams. Eine einfache Variante für eine AVI-Sequenz verwendet Videodaten und erfordert keinen Audiodatenstrom.
In diesem Abschnitt werden die OpenDML AVI-Dateiformaterweiterungen nicht beschrieben. Weitere Informationen zu diesen Erweiterungen finden Sie unter OpenDML AVI-Dateiformaterweiterungen, veröffentlicht vom OpenDML AVI M-JPEG File Format Subcommittee.
FOURCCs
Ein FOURCC (Vierzeichencode) ist eine 32-Bit-Ganzzahl ohne Vorzeichen, die durch Verkettung von vier ASCII-Zeichen erstellt wird. Beispielsweise wird fourcc "abcd" auf einem Little-Endian System als 0x64636261 dargestellt. FOURCCs können Leerzeichen enthalten, daher ist "abc" ein gültiges FOURCC. Das AVI-Dateiformat verwendet FOURCC-Codes, um Streamtypen, Datenblöcke, Indexeinträge und andere Informationen zu identifizieren.
RIFF-Dateiformat
Das AVI-Dateiformat basiert auf dem RIFF-Dokumentformat (Resource Interchange File Format). Eine RIFF-Datei besteht aus einem RIFF-Header gefolgt von null oder mehr Listen und Blöcken.
Der RIFF-Header hat die folgende Form:
'RIFF' fileSize fileType (data)
wobei "RIFF" der literale FOURCC-Code "RIFF", ein 4-Byte-Wert ist,
fileSize
der die Größe der Daten in der Datei angibt, undfileType
ein FOURCC-Wert ist, der den spezifischen Dateityp identifiziert. Der Wert vonfileSize
umfasst die Größe desfileType
FOURCC plus die Größe der folgenden Daten, enthält aber nicht die Größe des "RIFF"-FOURCC oder die Größe vonfileSize
. Die Dateidaten bestehen aus Blöcken und Listen in beliebiger Reihenfolge.Ein Block hat die folgende Form:
ckID ckSize ckData
dabei
ckID
ist ein FOURCC, der die im Block enthaltenen Daten identifiziert, ein 4-Byte-Wert ist,ckSize
der die Größe der Daten inckData
angibt undckData
null oder mehr Datenbytes ist. Die Daten sind immer auf die nächste WORD-Grenze gepolstert.ckSize
gibt die Größe der gültigen Daten im Block an; Sie enthält nicht die Auffüllung, die Größe vonckID
oder die Größe vonckSize
.Eine Liste hat die folgende Form:
'LIST' listSize listType listData
wobei "LIST" der literale FOURCC-Code "LIST" ist,
listSize
ein 4-Byte-Wert ist, der die Größe der Liste angibt,listType
ist ein FOURCC-Code undlistData
besteht aus Blöcken oder Listen in beliebiger Reihenfolge. Der Wert vonlistSize
enthält die Größe vonlistType
plus die Größe vonlistData
. Er enthält nicht die "LIST"-FOURCC-Größe oder die Größe vonlistSize
.
Der Rest dieses Abschnitts verwendet die folgende Notation, um RIFF-Blöcke zu beschreiben:
ckID ( ckData )
wobei die Blockgröße implizit ist. Mit dieser Notation kann eine Liste wie folgt dargestellt werden:
'LIST' ( listType ( listData ) )
Optionale Elemente werden in Klammern platziert: [ optional element ]
AVI RIFF-Formular
AVI-Dateien werden durch den FOURCC "AVI" im RIFF-Header identifiziert. Alle AVI-Dateien enthalten zwei obligatorische LIST-Blöcke, die das Format der Streams bzw. der Streamdaten definieren. Eine AVI-Datei kann auch einen Indexblock enthalten, der den Speicherort der Datenblöcke in der Datei angibt. Eine AVI-Datei mit diesen Komponenten hat die folgende Form:
RIFF ('AVI '
LIST ('hdrl' ... )
LIST ('movi' ... )
['idx1' (<AVI Index>) ]
)
Die 'hdrl'-Liste definiert das Format der Daten und ist der erste erforderliche LIST-Blöcke. Die Liste "movi" enthält die Daten für die AVI-Sequenz und ist der zweite erforderliche LIST-Blöcke. Die Liste "idx1" enthält den Index. AVI-Dateien müssen diese drei Komponenten in der richtigen Sequenz beibehalten.
Hinweis
Die OpenDML-Erweiterungen definieren einen anderen Indextyp, der durch fourcc "indx" identifiziert wird.
Die Listen "hdrl" und "movi" verwenden Teilchunks für ihre Daten. Das folgende Beispiel zeigt das AVI RIFF-Formular, das mit den Blöcken erweitert wird, die zum Ausfüllen dieser Listen erforderlich sind:
RIFF ('AVI '
LIST ('hdrl'
'avih'(<Main AVI Header>)
LIST ('strl'
'strh'(<Stream header>)
'strf'(<Stream format>)
[ 'strd'(<Additional header data>) ]
[ 'strn'(<Stream name>) ]
...
)
...
)
LIST ('movi'
{SubChunk | LIST ('rec '
SubChunk1
SubChunk2
...
)
...
}
...
)
['idx1' (<AVI Index>) ]
)
AVI-Hauptheader
Die Liste "hdrl" beginnt mit dem Standard AVI-Header, der in einem Avih-Block enthalten ist. Der Standard-Header enthält globale Informationen für die gesamte AVI-Datei, z. B. die Anzahl der Datenströme in der Datei sowie die Breite und Höhe der AVI-Sequenz. Der Standard Headerblock besteht aus einer AVIMAINHEADER-Struktur.
AVI-Streamheader
Mindestens eine "strl"-Liste folgt dem Standard-Header. Für jeden Datenstrom ist eine "strl"-Liste erforderlich. Jede "strl"-Liste enthält Informationen zu einem Stream in der Datei und muss einen Streamheaderblock ('strh') und einen Streamformatblock ('strf') enthalten. Darüber hinaus kann eine 'strl'-Liste einen Datenblock mit Streamheader ('strd') und einen Streamnamensblock ('strn') enthalten.
Der Streamheaderblock ('strh') besteht aus einer AVISTREAMHEADER-Struktur .
Ein Streamformatblock ('strf') muss dem Streamheaderblock folgen. Der Streamformatblock beschreibt das Format der Daten im Stream. Die in diesem Block enthaltenen Daten hängen vom Streamtyp ab. Bei Videostreams handelt es sich bei den Informationen um eine BITMAPINFO-Struktur , die ggf. Paletteninformationen enthält. Bei Audiostreams handelt es sich bei den Informationen um eine WAVEFORMATEX-Struktur .
Wenn der Datenblock des Streamheaders ('strd') vorhanden ist, folgt er dem Streamformatblock. Das Format und der Inhalt dieses Blöckes werden vom Codectreiber definiert. In der Regel verwenden Treiber diese Informationen für die Konfiguration. Anwendungen, die AVI-Dateien lesen und schreiben, müssen diese Informationen nicht interpretieren. Sie übertragen es einfach als Speicherblock an und vom Treiber.
Der optionale Abschnitt "strn" enthält eine Textzeichenfolge mit NULL-Beendigung, die den Stream beschreibt.
Die Streamheader in der Liste "hdrl" sind den Streamdaten in der "movi"-Liste entsprechend der Reihenfolge der "strl"-Blöcke zugeordnet. Der erste "strl"-Block gilt für Stream 0, der zweite für Stream 1 usw.
Daten streamen ('movi'-Liste)
Nach den Headerinformationen ist eine "movi"-Liste, die die tatsächlichen Daten in den Streams enthält, d. h. die Videoframes und Audiobeispiele. Die Datenblöcke können sich direkt in der "movi"-Liste befinden, oder sie können in "rec"-Listen gruppiert werden. Die Gruppierung "rec" impliziert, dass die gruppierten Blöcke auf einmal vom Datenträger gelesen werden sollen, und ist für Dateien vorgesehen, die für die Wiedergabe von CD-ROM verschachtelt sind.
Der FOURCC, der die einzelnen Datenblöcke identifiziert, besteht aus einer zweistelligen Datenstromnummer gefolgt von einem zweistelligen Code, der den Typ der Informationen im Block definiert.
Code mit zwei Zeichen | BESCHREIBUNG |
---|---|
db | Nicht komprimierter Videoframe |
dc | Komprimierter Videorahmen |
pc | Palettenwechsel |
Wb | Audiodaten |
Wenn Stream 0 beispielsweise Audio enthält, haben die Datenblöcke für diesen Stream den FOURCC -Wert "00wb". Wenn Stream 1 Video enthält, haben die Datenblöcke für diesen Stream die FOURCC -Version "01db" oder "01dc". Videodatenblöcke können auch neue Paletteneinträge definieren, um die Palette während einer AVI-Sequenz zu aktualisieren. Jeder Palettenänderungsblock ('xxpc') enthält eine AVIPALCHANGE-Struktur . Wenn ein Stream Palettenänderungen enthält, legen Sie das AVISF_VIDEO_PALCHANGES-Flag im dwFlags-Element der AVISTREAMHEADER-Struktur für diesen Stream fest.
Textstreams können beliebige zweistellige Codes verwenden.
AVI-Indexeinträge
-
AVI 1.0-Index
-
Ein optionaler Indexabschnitt ('idx1') kann der 'movi'-Liste folgen. Der Index enthält eine Liste der Datenblöcke und deren Speicherort in der Datei. Es besteht aus einer AVIOLDINDEX-Struktur mit Einträgen für jeden Datenblock, einschließlich "rec"-Blöcken. Wenn die Datei einen Index enthält, legen Sie das AVIF_HASINDEX-Flag im dwFlags-Member der AVIMAINHEADER-Struktur fest.
-
AVI 2.0-Index
-
Ein AVI 2.0-Index kann als einzelner Block angezeigt werden. Alternativ können Indexsegmente im Segment "movi" verschachtelt werden. Wenn die Indexsegmente im Segment "movi" platziert werden, enthält ein Superindex einen Index der Indexsegmente. Die AVIMETAINDEX-Struktur ist die Basisstruktur für die Indexsegmente und den Superindex. Weitere Informationen finden Sie in den OpenDML AVI-Dateiformaterweiterungen, die vom OpenDML AVI M-JPEG-Dateiformatunterausschuss veröffentlicht wurden. (Diese Ressource ist in einigen Sprachen und Ländern möglicherweise nicht verfügbar.)
Andere Datenblöcke
Daten können in einer AVI-Datei ausgerichtet werden, indem nach Bedarf JUNK-Blöcke eingefügt werden. Anwendungen sollten den Inhalt eines JUNK-Blöckes ignorieren.
Zugehörige Themen