Bagikan melalui


Referensi File AVI RIFF

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan Audio /Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine dan Pengambilan Audio/Video di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Format file Microsoft AVI adalah spesifikasi file RIFF yang digunakan dengan aplikasi yang mengambil, mengedit, dan memutar urutan audio-video. Secara umum, file AVI berisi beberapa aliran dari berbagai jenis data. Sebagian besar urutan AVI menggunakan aliran audio dan video. Variasi sederhana untuk urutan AVI menggunakan data video dan tidak memerlukan aliran audio.

Bagian ini tidak menjelaskan ekstensi format file OpenDML AVI. Untuk informasi lebih lanjut tentang ekstensi ini, lihat OpenDML AVI File Format Extensions, diterbitkan oleh Subkomite Format File OpenDML AVI M-JPEG.

FOURCCs

FOURCC (kode empat karakter) adalah bilangan bulat yang tidak ditandatangani 32-bit yang dibuat dengan menggabungkan empat karakter ASCII. Misalnya, FOURCC 'abcd' diwakili pada sistem Little-Endian sebagai 0x64636261. FOURCC dapat berisi karakter spasi, jadi 'abc' adalah FOURCC yang valid. Format file AVI menggunakan kode FOURCC untuk mengidentifikasi jenis aliran, potongan data, entri indeks, dan informasi lainnya.

RIFF File Format

Format file AVI didasarkan pada format dokumen RIFF (format file pertukaran sumber daya). File RIFF terdiri dari header RIFF diikuti oleh nol atau lebih daftar dan potongan .

  • Header RIFF memiliki formulir berikut:

    'RIFF' fileSize fileType (data)

    di mana 'RIFF' adalah kode FOURCC harfiah 'RIFF', fileSize adalah nilai 4-byte yang memberikan ukuran data dalam file, dan fileType adalah FOURCC yang mengidentifikasi jenis file tertentu. Nilai fileSize mencakup ukuran fileType FOURCC ditambah ukuran data berikut, tetapi tidak termasuk ukuran FOURCC 'RIFF' atau ukuran fileSize. Data file terdiri dari potongan dan daftar, dalam urutan apa pun.

  • Gugus memiliki formulir berikut:

    ckID ckSize ckData

    di mana ckID adalah FOURCC yang mengidentifikasi data yang terkandung dalam gugus, ckSize adalah nilai 4 byte yang memberikan ukuran data dalam ckData, dan ckData adalah nol atau lebih byte data. Data selalu diisi ke batas WORD terdekat. ckSize memberikan ukuran data yang valid dalam gugus; itu tidak termasuk padding, ukuran ckID, atau ukuran ckSize.

  • Daftar memiliki formulir berikut:

    'LIST' listSize listType listData

    di mana 'LIST' adalah kode FOURCC harfiah 'LIST', listSize adalah nilai 4-byte yang memberikan ukuran daftar, listType adalah kode FOURCC, dan listData terdiri dari gugus atau daftar, dalam urutan apa pun. Nilai listSize mencakup ukuran listType ditambah ukuran listData; tidak termasuk 'LIST' FOURCC atau ukuran listSize.

Sisa bagian ini menggunakan notasi berikut untuk menjelaskan gugus RIFF:

ckID ( ckData )

di mana ukuran gugus implisit. Dengan menggunakan notasi ini, daftar dapat direpresentasikan sebagai:

'LIST' ( listType ( listData ) )

Elemen opsional ditempatkan dalam tanda kurung: [ optional element ]

Formulir AVI RIFF

File AVI diidentifikasi oleh FOURCC 'AVI ' di header RIFF. Semua file AVI mencakup dua gugus LIST wajib, yang menentukan format aliran dan data aliran. File AVI mungkin juga menyertakan gugus indeks, yang memberikan lokasi potongan data dalam file. File AVI dengan komponen-komponen ini memiliki formulir berikut:

RIFF ('AVI '
      LIST ('hdrl' ... )
      LIST ('movi' ... )
      ['idx1' (<AVI Index>) ]
     )

Daftar 'hdrl' mendefinisikan format data dan merupakan potongan LIST pertama yang diperlukan. Daftar 'movi' berisi data untuk urutan AVI dan merupakan gugus LIST kedua yang diperlukan. Daftar 'idx1' berisi indeks. File AVI harus menyimpan ketiga komponen ini dalam urutan yang tepat.

Nota

Ekstensi OpenDML menentukan jenis indeks lain, yang diidentifikasi oleh FOURCC 'indx'.

 

Daftar 'hdrl' dan 'movi' menggunakan subchunk untuk data mereka. Contoh berikut menunjukkan formulir AVI RIFF yang diperluas dengan potongan yang diperlukan untuk menyelesaikan daftar ini:

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>) ]
     )

Header Utama AVI

Daftar 'hdrl' dimulai dengan header AVI utama, yang terkandung dalam gugus 'avih'. Header utama berisi informasi global untuk seluruh file AVI, seperti jumlah aliran dalam file dan lebar dan tinggi urutan AVI. Potongan header utama terdiri dari strukturAVIMAINHEADER.

Header Aliran AVI

Satu atau beberapa daftar 'strl' mengikuti header utama. Daftar 'strl' diperlukan untuk setiap aliran data. Setiap daftar 'strl' berisi informasi tentang satu aliran dalam file, dan harus berisi gugus header aliran ('strh') dan gugus format aliran ('strf'). Selain itu, daftar 'strl' mungkin berisi gugus data stream-header ('strd') dan gugus nama aliran ('strn').

Gugus header aliran ('strh') terdiri dari strukturAVISTREAMHEADER.

Gugus format aliran ('strf') harus mengikuti gugus header aliran. Potongan format aliran menjelaskan format data dalam aliran. Data yang terkandung dalam gugus ini tergantung pada jenis aliran. Untuk streaming video, informasinya adalah struktur BITMAPINFO, termasuk informasi palet jika sesuai. Untuk aliran audio, informasinya adalah strukturWAVEFORMATEX.

Jika ada gugus data stream-header ('strd'), ia mengikuti potongan format aliran. Format dan isi gugus ini didefinisikan oleh pengandar codec. Biasanya, driver menggunakan informasi ini untuk konfigurasi. Aplikasi yang membaca dan menulis file AVI tidak perlu menginterpretasikan informasi ini; mereka sederhana mentransfernya ke dan dari driver sebagai blok memori.

Potongan 'strn' opsional berisi string teks null-terminated yang menjelaskan aliran.

Header stream dalam daftar 'hdrl' dikaitkan dengan data aliran dalam daftar 'movi' sesuai dengan urutan potongan 'strl'. Potongan 'strl' pertama berlaku untuk streaming 0, yang kedua berlaku untuk streaming 1, dan sebagainya.

Stream Data ('movi' List)

Mengikuti informasi header adalah daftar 'movi' yang berisi data aktual dalam aliran—yaitu bingkai video dan sampel audio. Potongan data dapat berada langsung dalam daftar 'movi', atau mungkin dikelompokkan dalam daftar 'rec'. Pengelompokan 'rec' menyiratkan bahwa potongan yang dikelompokkan harus dibaca dari disk sekaligus, dan ditujukan untuk file yang diselingi untuk dimainkan dari CD-ROM.

FOURCC yang mengidentifikasi setiap potongan data terdiri dari nomor aliran dua digit diikuti oleh kode dua karakter yang menentukan jenis informasi dalam gugus.

Kode dua karakter Deskripsi
Db Bingkai video tidak dikompresi
arus searah Bingkai video terkompresi
komputer mikro Perubahan palet
Wb Data audio

 

Misalnya, jika streaming 0 berisi audio, potongan data untuk aliran tersebut akan memiliki FOURCC '00wb'. Jika streaming 1 berisi video, potongan data untuk aliran tersebut akan memiliki FOURCC '01db' atau '01dc'. Potongan data video juga dapat menentukan entri palet baru untuk memperbarui palet selama urutan AVI. Setiap potongan palet-ubah ('xxpc') berisi strukturAVIPALCHANGE. Jika aliran berisi perubahan palet, atur bendera AVISF_VIDEO_PALCHANGES di dwFlags anggota strukturAVISTREAMHEADERuntuk aliran tersebut.

Aliran teks dapat menggunakan kode dua karakter arbitrer.

Entri Indeks AVI

indeks AVI 1.0

Gugus indeks opsional ('idx1') dapat mengikuti daftar 'movi'. Indeks berisi daftar potongan data dan lokasinya dalam file. Ini terdiri dari strukturAVIOLDINDEXdengan entri untuk setiap potongan data, termasuk potongan 'rec'. Jika file berisi indeks, atur bendera AVIF_HASINDEX di dwFlags anggota strukturAVIMAINHEADER.

indeks AVI 2.0

Indeks AVI 2.0 dapat muncul sebagai satu gugus. Atau, segmen indeks dapat diselingi dalam gugus 'movi'. Jika segmen indeks ditempatkan di gugus 'movi', indeks super berisi indeks segmen indeks. StrukturAVIMETAINDEXadalah struktur dasar untuk segmen indeks dan indeks super. Untuk informasi selengkapnya, lihat OpenDML AVI File Format Extensions, diterbitkan oleh Subkomite Format File OpenDML AVI M-JPEG. (Sumber daya ini mungkin tidak tersedia di beberapa bahasa dan negara.)

Potongan Data Lainnya

Data dapat diselaraskan dalam file AVI dengan menyisipkan potongan 'SAMPAH' sesuai kebutuhan. Aplikasi harus mengabaikan konten gugus 'SAMPAH'.

Format File AVI