Bagikan melalui


Jenis Video H.264

[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.]

Subjenis media berikut didefinisikan untuk video H.264.

Subjenis FOURCC Deskripsi
MEDIASUBTYPE_AVC1 'AVC1' H.264 bitstream tanpa kode mulai.
MEDIASUBTYPE_H264 'H264' H.264 bitstream dengan kode mulai.
MEDIASUBTYPE_h264 'h264' Setara dengan MEDIASUBTYPE_H264, dengan FOURCC yang berbeda.
MEDIASUBTYPE_X264 'X264' Setara dengan MEDIASUBTYPE_H264, dengan FOURCC yang berbeda.
MEDIASUBTYPE_x264 'x264' Setara dengan MEDIASUBTYPE_H264, dengan FOURCC yang berbeda.

 

GUID subjenis ini dinyatakan dalam wmcodecdsp.h.

Perbedaan utama antara jenis media ini adalah adanya kode mulai di bitstream. Jika subjenis MEDIASUBTYPE_AVC1, bitstream tidak berisi kode mulai.

H.264 Bitstream dengan Kode Mulai

Bitstream H.264 yang ditransmisikan melalui udara, atau terkandung dalam program MPEG-2 atau aliran transportasi, atau direkam pada HD-DVD, diformat seperti yang dijelaskan dalam Lampiran B DARI ITU-T Rec. H.264. Menurut spesifikasi ini, bitstream terdiri dari urutan unit lapisan abstraksi jaringan (NALUs), yang masing-masing diawali dengan kode awal yang sama dengan 0x000001 atau 0x00000001.

Saat kode mulai ada di bitstream, jenis media berikut digunakan:

Label Nilai
Jenis utama MEDIATYPE_Video
Subjenis MEDIASUBTYPE_H264, MEDIASUBTYPE_h264, MEDIASUBTYPE_X264, atau MEDIASUBTYPE_x264
Jenis format FORMAT_VideoInfo, FORMAT_VideoInfo2, FORMAT_MPEG2Video, atau GUID_NULL

 

Jika jenis format GUID_NULL, tidak ada struktur format yang ada.

Ketika bitstream berisi kode mulai, salah satu jenis format yang tercantum di sini sudah cukup, karena dekoder tidak memerlukan informasi tambahan untuk mengurai aliran. Bitstream sudah berisi semua informasi yang diperlukan oleh dekoder, dan kode mulai memungkinkan dekoder untuk menemukan awal setiap NALU.

Subjenis berikut ini setara:

H.264 Bitstream Tanpa Kode Mulai

Format kontainer MP4 menyimpan data H.264 tanpa kode mulai. Sebaliknya, setiap NALU diawali dengan bidang panjang, yang memberikan panjang NALU dalam byte. Ukuran bidang panjang dapat bervariasi, tetapi biasanya 1, 2, atau 4 byte.

Ketika kode mulai tidak ada di bitstream, jenis media berikut digunakan.

Label Nilai
Jenis utama MEDIATYPE_Video
Subjenis MEDIASUBTYPE_AVC1
Jenis format FORMAT_MPEG2Video

 

Blok format adalah struktur MPEG2VIDEOINFO . Struktur ini harus diisi sebagai berikut:

  • hdr: Struktur VIDEOINFOHEADER2 yang menjelaskan bitstream. Tidak ada tabel warna yang ada setelah bagian BITMAPINFOHEADER dari struktur, dan biClrUsed harus nol.
  • dwStartTimeCode: Tidak digunakan. Atur ke nol.
  • cbSequenceHeader: Panjang array dwSequenceHeader dalam byte.
  • dwProfile: Menentukan profil H.264.
  • dwLevel: Menentukan tingkat H.264.
  • dwFlags: Jumlah byte yang digunakan untuk bidang panjang yang muncul sebelum setiap NALU. Bidang panjang menunjukkan ukuran NALU berikut dalam byte. Misalnya, jika dwFlags adalah 4, setiap NALU didahului oleh bidang panjang 4 byte. Nilai yang valid adalah 1, 2, dan 4.
  • dwSequenceHeader: Array byte yang mungkin berisi kumpulan parameter urutan (SPS) dan rangkaian parameter gambar (PPS) NALUs.

Kontainer MP4 mungkin berisi kumpulan parameter urutan (SPS) atau set parameter gambar (PPS) sebagai unit NAL khusus dalam header file atau dalam aliran terpisah (berbeda dari aliran video). Ketika format ditetapkan, jenis media dapat menentukan unit NAL SPS dan PPS dalam array dwSequenceHeader . Jika cbSequenceHeader lebih besar dari nol, dwSequenceHeader adalah awal array byte yang berisi SPS dan PPS NALUs, dibatasi oleh bidang panjang 2 byte, semuanya dalam urutan byte jaringan (big-endian). Dimungkinkan untuk memiliki SPS dan PPS, hanya salah satu dari jenis ini, atau tidak ada. Jenis aktual dari setiap NALU dapat ditentukan dengan memeriksa bidang nal_unit_type NALU itu sendiri.

Ketika jenis media ini digunakan, setiap sampel media dimulai di awal NALU, dan unit NAL tidak mencakup sampel. Ini memungkinkan dekoder untuk pulih dari kerusakan data atau sampel yang dihilangkan.