Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]
Format pliku Microsoft AVI to specyfikacja pliku RIFF używana z aplikacjami, które przechwytują, edytują i odtwarzają sekwencje audio-wideo. Ogólnie rzecz biorąc, pliki AVI zawierają wiele strumieni różnych typów danych. Większość sekwencji AVI używa strumieni audio i wideo. Prosta odmiana sekwencji AVI używa danych wideo i nie wymaga strumienia audio.
W tej sekcji nie opisano rozszerzeń formatu plików AVI OpenDML. Aby uzyskać więcej informacji na temat tych rozszerzeń, zobacz Rozszerzenia formatu plików AVI OpenDML, opublikowane przez Podkomisji formatu plików AVI M-JPEG OpenDML.
FOURCCs
FourCC (czteroznaczny kod) to 32-bitowa liczba całkowita bez znaku utworzona przez łączenie czterech znaków ASCII. Na przykład funkcja FOURCC "abcd" jest reprezentowana w systemie Little-Endian jako 0x64636261. FourCCs może zawierać znaki spacji, więc "abc" jest prawidłowym znakiem FOURCC. Format pliku AVI używa kodów FOURCC do identyfikowania typów strumieni, fragmentów danych, wpisów indeksu i innych informacji.
Format pliku RIFF
Format pliku AVI jest oparty na formacie dokumentu RIFF (format pliku wymiany zasobów). Plik RIFF składa się z nagłówka RIFF, po którym następuje zero lub więcej list i fragmentów .
Nagłówek RIFF ma następującą postać:
'RIFF' fileSize fileType (data)gdzie "RIFF" to literał KOD FOURCC "RIFF",
fileSizejest wartością 4-bajtową dającą rozmiar danych w pliku, afileTypejest ZNAKIem FOURCC, który identyfikuje określony typ pliku. WartośćfileSizezawiera rozmiarfileTypeFOURCC oraz rozmiar poniższych danych, ale nie zawiera rozmiaru "RIFF" FOURCC lub rozmiarufileSize. Dane pliku składają się z fragmentów i list w dowolnej kolejności.Fragment ma następującą formę:
ckID ckSize ckDatagdzie
ckIDto FOURCC, który identyfikuje dane zawarte w fragmentach,ckSizejest wartością 4-bajtową dającą rozmiar danych wckData, ackDatawynosi zero lub więcej bajtów danych. Dane są zawsze dopełniane do najbliższej granicy programu WORD.ckSizedaje rozmiar prawidłowych danych we fragmentu; nie zawiera wypełnienia, rozmiaruckIDlub rozmiaruckSize.Lista ma następujący formularz:
'LIST' listSize listType listDatagdzie "LIST" to literał KOD FOURCC "LIST",
listSizejest wartością 4-bajtową dającą rozmiar listy,listTypejest kodem FOURCC, alistDataskłada się z fragmentów lub list w dowolnej kolejności. WartośćlistSizeobejmuje rozmiarlistTypeoraz rozmiarlistData; nie zawiera "LIST" FOURCC ani rozmiarulistSize.
W pozostałej części tej sekcji użyto następującej notacji do opisania fragmentów RIFF:
ckID ( ckData )
gdzie rozmiar fragmentu jest niejawny. Korzystając z tej notacji, lista może być reprezentowana jako:
'LIST' ( listType ( listData ) )
Elementy opcjonalne są umieszczane w nawiasach kwadratowych: [ optional element ]
Formularz AVI RIFF
Pliki AVI są identyfikowane przez FOURCC "AVI" w nagłówku RIFF. Wszystkie pliki AVI zawierają dwa obowiązkowe fragmenty list, które definiują odpowiednio format strumieni i danych strumienia. Plik AVI może również zawierać fragment indeksu, który daje lokalizację fragmentów danych w pliku. Plik AVI z tymi składnikami ma następującą postać:
RIFF ('AVI '
LIST ('hdrl' ... )
LIST ('movi' ... )
['idx1' (<AVI Index>) ]
)
Lista "hdrl" definiuje format danych i jest pierwszym wymaganym fragmentem listy. Lista "movi" zawiera dane dla sekwencji AVI i jest drugim wymaganym fragmentem LISTY. Lista "idx1" zawiera indeks. Pliki AVI muszą zachować te trzy składniki w odpowiedniej sekwencji.
Nuta
Rozszerzenia OpenDML definiują inny typ indeksu zidentyfikowanego przez element FOURCC "indx".
Listy "hdrl" i "movi" używają fragmentów dla swoich danych. W poniższym przykładzie pokazano formularz AVI RIFF rozwinięty z fragmentami wymaganymi do ukończenia tych list:
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>) ]
)
Główny nagłówek AVI
Lista "hdrl" zaczyna się od głównego nagłówka AVI, który znajduje się w "avih" fragment. Główny nagłówek zawiera globalne informacje dotyczące całego pliku AVI, takie jak liczba strumieni w pliku oraz szerokość i wysokość sekwencji AVI. Główny fragment nagłówka składa się z struktury AVIMAINHEADER.
Nagłówki strumienia AVI
Co najmniej jedna lista "strl" następuje po nagłówku głównym. Lista "strl" jest wymagana dla każdego strumienia danych. Każda lista "strl" zawiera informacje o jednym strumieniu w pliku i musi zawierać fragment nagłówka strumienia ('strh') i fragment formatu strumienia ('strf'). Ponadto lista "strl" może zawierać fragment danych nagłówka strumienia ('strd') i fragment nazwy strumienia ('strn').
Fragment nagłówka strumienia ('strh') składa się z struktury AVISTREAMHEADER.
Fragment formatu strumienia ('strf') musi być zgodny ze fragmentem nagłówka strumienia. Fragment formatu strumienia opisuje format danych w strumieniu. Dane zawarte w tym fragmentzie zależą od typu strumienia. W przypadku strumieni wideo informacje są strukturą BITMAPINFO, w tym informacje o palecie, jeśli są odpowiednie. W przypadku strumieni audio informacje są strukturą WAVEFORMATEX.
Jeśli fragment danych nagłówka strumienia ('strd') jest obecny, jest zgodny z fragmentem formatu strumienia. Format i zawartość tego fragmentu są definiowane przez sterownik koderów. Zazwyczaj sterowniki używają tych informacji do konfiguracji. Aplikacje odczytujące i zapisujące pliki AVI nie muszą interpretować tych informacji; proste przeniesienie go do i z sterownika jako bloku pamięci.
Opcjonalny fragment "strn" zawiera ciąg tekstowy o wartości null opisujący strumień.
Nagłówki strumienia na liście "hdrl" są skojarzone z danymi strumienia na liście "movi" zgodnie z kolejnością fragmentów "strl". Pierwszy fragment "strl" dotyczy strumienia 0, drugi dotyczy strumienia 1 i tak dalej.
Dane strumienia (lista movi)
Po nagłówku znajduje się lista "movi", która zawiera rzeczywiste dane w strumieniach — czyli ramki wideo i przykłady audio. Fragmenty danych mogą znajdować się bezpośrednio na liście "movi" lub mogą być grupowane na listach "rec". Grupowanie "rec" oznacza, że zgrupowane fragmenty powinny być odczytywane z dysku jednocześnie i jest przeznaczone dla plików, które są przeplatane do odtwarzania z CD-ROM.
Funkcja FOURCC, która identyfikuje każdy fragment danych, składa się z dwucyfrowego numeru strumienia, po którym następuje dwuznaczny kod definiujący typ informacji we fragmentu.
| Dwuznaczny kod | Opis |
|---|---|
| Db | Nieskompresowana ramka wideo |
| Dc | Skompresowana ramka wideo |
| komputer osobisty | Zmiana palety |
| Wb | Dane audio |
Jeśli na przykład strumień 0 zawiera dźwięk, fragmenty danych dla tego strumienia będą miały wartość FOURCC "00wb". Jeśli strumień 1 zawiera wideo, fragmenty danych dla tego strumienia będą miały wartość FOURCC "01db" lub "01dc". Fragmenty danych wideo mogą również definiować nowe wpisy palety w celu zaktualizowania palety podczas sekwencji AVI. Każdy fragment zmiany palety ('xxpc') zawiera strukturę AVIPALCHANGE. Jeśli strumień zawiera zmiany palety, ustaw flagę AVISF_VIDEO_PALCHANGES w dwFlags elementu członkowskiego AVISTREAMHEADER struktury dla tego strumienia.
Strumienie tekstowe mogą używać dowolnych dwuznakowych kodów.
Wpisy indeksu AVI
-
indeks AVI 1.0
-
Opcjonalny fragment indeksu ('idx1') może podążać za listą "movi". Indeks zawiera listę fragmentów danych i ich lokalizację w pliku. Składa się z struktury AVIOLDINDEX z wpisami dla każdego fragmentu danych, w tym fragmentami "rec". Jeśli plik zawiera indeks, ustaw flagę AVIF_HASINDEX w dwFlags elementu członkowskiego AVIMAINHEADER.
-
indeks AVI 2.0
-
Indeks AVI 2.0 może być wyświetlany jako pojedynczy fragment. Alternatywnie segmenty indeksów można przeplatać w ramach fragmentu "movi". Jeśli segmenty indeksu są umieszczane w fragmentze "movi", indeks super zawiera indeks segmentów indeksu. Struktura AVIMETAINDEX jest podstawową strukturą zarówno dla segmentów indeksu, jak i indeksu super. Aby uzyskać więcej informacji, zobacz Rozszerzenia formatu plików AVI OpenDML, opublikowane przez Podkomisji formatu plików AVI M-JPEG OpenDML. (Ten zasób może być niedostępny w niektórych językach i krajach).
Inne fragmenty danych
Dane można wyrównać do pliku AVI, wstawiając fragmenty "JUNK" zgodnie z potrzebami. Aplikacje powinny ignorować zawartość fragmentu "ŚMIECI".
Tematy pokrewne