Pengode Video H.264
Encoder video H.264 Microsoft Media Foundation adalah transformasi Media Foundation yang mendukung profil H.264 berikut:
- Profil Garis Besar
- Profil Utama
- Profil tinggi (memerlukan Windows 8)
Encoder video H.264 mengekspos antarmuka berikut:
Jenis Input
Jenis media input harus memiliki salah satu subjenis berikut:
- MFVideoFormat_I420
- MFVideoFormat_IYUV
- MFVideoFormat_NV12
- MFVideoFormat_YUY2
- MFVideoFormat_YV12
Untuk informasi selengkapnya tentang subjenis ini, lihat GUID Subjenis Video.
Jenis output harus diatur sebelum jenis input. Hingga jenis output diatur, metode IMFTransform::SetInputType encoder mengembalikan MF_E_TRANSFORM_TYPE_NOT_SET.
Jenis output
Encoder mendukung subjenis output tunggal:
- MFVideoFormat_H264
Atur atribut berikut pada jenis media output.
Atribut | Deskripsi |
---|---|
MF_MT_MAJOR_TYPE | Jenis utama. Pasti MFMediaType_Video. |
MF_MT_SUBTYPE | Subjenis video. Pasti MFVideoFormat_H264. |
MF_MT_AVG_BITRATE | Laju bit yang dikodekan rata-rata, dalam bit per detik. Harus lebih besar dari nol. |
MF_MT_FRAME_RATE | Kecepatan bingkai. |
MF_MT_FRAME_SIZE | Ukuran bingkai. |
MF_MT_INTERLACE_MODE | Mode interlace. |
MF_MT_MPEG2_PROFILE | Profil pengodean H.264. Nilai yang didukung adalah:
|
MF_MT_MPEG2_LEVEL | Pilihan. Menentukan tingkat pengodean H.264. Nilai defaultnya adalah –1, menunjukkan bahwa encoder akan memilih tingkat pengodean. Disarankan untuk tidak mengatur tingkat dalam jenis media, dan memungkinkan encoder untuk memilih tingkat. Encoder dapat memperoleh tingkat yang tepat untuk streaming video tertentu, dengan mempertimbangkan batasan format dan karakteristik video. Untuk informasi selengkapnya tentang batasan profil dan tingkat, lihat Annex A dari ITU-T H.264. |
MF_MT_PIXEL_ASPECT_RATIO | Pilihan. Menentukan rasio aspek piksel. Nilai defaultnya adalah 1:1. |
Setelah jenis output diatur, encoder video memperbarui jenis dengan menambahkan atribut MF_MT_MPEG_SEQUENCE_HEADER . Atribut ini berisi header urutan.
Properti Codec
Encoder H.264 mengimplementasikan antarmuka ICodecAPI untuk mengatur parameter pengodean. Ini mendukung properti berikut.
Untuk persyaratan codec untuk sertifikasi encoder HCK, lihat bagian Encoder Perangkat Keras Bersertifikat di bawah ini.
Properti berikut ini didukung di Windows 7.
Properti | Deskripsi |
---|---|
CODECAPI_AVEncCommonRateControlMode | Mengatur mode kontrol laju. Lihat Keterangan. Mode default adalah laju bit variabel (VBR) yang tidak dibatasi. |
CODECAPI_AVEncCommonQuality | Mengatur tingkat kualitas. Properti ini berlaku ketika mode kontrol laju adalah VBR berbasis kualitas (eAVEncCommonRateControlMode_Quality). Rentang yang valid adalah 1–100. Nilai defaultnya adalah 70. Untuk mengatur parameter ini, atur properti sebelum memanggil IMFTransform::SetOutputType. Untuk mengatur parameter ini di Windows 7, atur properti sebelum memanggil IMFTransform::SetOutputType. Encoder mengabaikan perubahan setelah jenis output diatur. Dalam Windows 8, properti ini dapat diatur kapan saja selama pengodean. Perubahan diterapkan mulai dari bingkai input berikutnya. Secara internal, encoder mengonversi properti ini menjadi nilai AVEncVideoEncodeQP . |
Properti berikut memerlukan Windows 8.
Properti | Deskripsi |
---|---|
CODECAPI_AVEncAdaptiveMode | Mengatur mode pengodean adaptif. Encoder H.264 mendukung mode berikut dalam Windows 8:
|
CODECAPI_AVEncCommonBufferSize | Mengatur ukuran buffer, dalam byte, untuk pengodean laju bit konstan (CBR). Rentang yang valid adalah [1 ... 2³²–1]. Membutuhkan Windows 8. |
CODECAPI_AVEncCommonMaxBitRate | Untuk pengodean VBR yang dibatasi, menentukan tingkat di mana "wadah bocor" dikosongkan, dalam bit per detik. Properti ini berlaku ketika mode kontrol laju eAVEncCommonRateControlMode_PeakConstrainedVBR. Rentang yang valid adalah [1 ... 2³²–1]. |
CODECAPI_AVEncCommonMeanBitRate | Mengatur laju bit rata-rata untuk aliran bit yang dikodekan, dalam bit per detik. Properti ini diabaikan jika mode kontrol laju eAVEncCommonRateControlMode_Quality. Rentang yang valid adalah [1 ... 2³²–1]. Dalam mode CBR dan VBR yang tidak dibatasi, laju bit rata-rata menentukan ukuran akhir file. Dalam mode CBR, laju bit rata-rata juga merupakan laju di mana bit terkompresi dikosongkan dari "wadah bocor." (Untuk informasi selengkapnya, lihat Model Buffer Wadah Bocor.) Di Windows 7, laju bit rata-rata ditentukan oleh atribut MF_MT_AVG_BITRATE pada jenis media. Dalam Windows 8, Anda dapat mengatur laju bit rata-rata menggunakan atribut MF_MT_AVG_BITRATE atau properti CODECAPI_AVEncCommonMeanBitRate. Jika keduanya diatur, CODECAPI_AVEncCommonMeanBitRate mengambil alih. Dalam Windows 8, Anda dapat mengatur laju bit rata-rata selama pengodean. Jika laju bit berubah, encoder menggunakan pengodean adaptif. |
CODECAPI_AVEncCommonQualityVsSpeed | Mengatur tradeoff kualitas/kecepatan. Rentang yang valid:
Nilai ini memengaruhi bagaimana encoder melakukan berbagai operasi pengodean, seperti kompensasi gerakan. Pada tingkat kompleksitas yang lebih tinggi, encoder berjalan lebih lambat tetapi menghasilkan kualitas yang lebih baik pada laju bit yang sama. |
CODECAPI_AVEncH264CABACEnable | Mengaktifkan atau menonaktifkan CABAC (pengodean aritmatika biner adaptif konteks) untuk pengodean entropi H.264. Nilai defaultnya adalah VARIANT_FALSE. CABAC tidak digunakan untuk profil Garis Besar. |
CODECAPI_AVEncH264SPSID | Menetapkan nilai seq_parameter_set_id di unit SPS NAL dari bitstream H.264. |
CODECAPI_AVEncMPVDefaultBPictureCount | Mengatur jumlah maksimum bingkai B berturut-turut dalam bitstream output. Nilai yang valid adalah:
Untuk profil Garis Besar, jumlah bingkai B selalu nol. Encoder akan mengambil alih nilai bukan nol. Untuk profil H.264 lainnya, jika properti ini bukan nol, pola pengodeannya adalah IBBPBBP, di mana jumlah maksimum bingkai B berturut-turut sama dengan CODECAPI_AVEncMPVDefaultBPictureCount. |
CODECAPI_AVEncMPVGOPSize | Mengatur jumlah gambar dari satu header GOP ke header berikutnya, termasuk jangkar utama tetapi bukan yang berikut ini. Rentang yang valid adalah [0 ... 2³²–1]. Jika nol, encoder memilih ukuran GOP. Nilai defaultnya adalah nol. |
CODECAPI_AVEncNumWorkerThreads | Mengatur jumlah utas pekerja yang digunakan oleh encoder. Rentang yang valid adalah 0–16. Jika nol, encoder memilih jumlah utas. |
CODECAPI_AVEncVideoContentType | Menunjukkan jenis konten video. |
CODECAPI_AVEncVideoEncodeQP | Rentang yang valid: 16–51. Nilai defaultnya adalah 24. Properti ini berlaku ketika mode kontrol laju eAVEncCommonRateControlMode_Quality. Properti ini mengonfigurasi pengaturan pengodean yang sama dengan AVEncCommonQuality. Namun, AVEncVideoEncodeQP memungkinkan aplikasi menentukan nilai QP secara langsung. Jika kedua properti diatur, AVEncVideoEncodeQP akan mengambil alih. Nilai default 24 sesuai dengan nilai default 70 untuk pengaturan AVEncCommonQuality . |
CODECAPI_AVEncVideoForceKeyFrame | Memaksa encoder untuk membuat kode bingkai berikutnya sebagai bingkai kunci. |
CODECAPI_AVEncVideoMinQP | Rentang valid: 0–51. Nilai default adalah 0. Properti ini berlaku untuk semua mode kontrol laju. Encoder tidak boleh menghasilkan nilai QP yang lebih rendah dari apa yang ditentukan oleh properti CODECAPI_AVEncVideoMinQP . |
CODECAPI_AVLowLatencyMode | Mengaktifkan atau menonaktifkan mode latensi rendah. Lihat "Multithreading" di bagian Keterangan. |
Keterangan
Encoder mendukung mode kontrol laju berikut.
Mode | Terus-menerus | Deskripsi |
---|---|---|
Laju bit konstan (CBR) | eAVEncCommonRateControlMode_CBR | Encoder mencoba mencapai laju bit yang konstan, menggunakan model "wadah bocor". Laju bit target diberikan oleh properti CODECAPI_AVEncCommonMeanBitRate . Membutuhkan Windows 8. |
Laju bit variabel yang dibatasi (VBR) | eAVEncCommonRateControlMode_PeakConstrainedVBR | Encoder menggunakan model "wadah bocor" dengan laju bit puncak. Tingkat pengurasan untuk wadah bocor diberikan oleh properti CODECAPI_AVEncCommonMaxBitRate . Membutuhkan Windows 8. |
Laju bit variabel berbasis kualitas (VBR) | eAVEncCommonRateControlMode_Quality | Encoder mencoba mencapai tingkat kualitas yang konstan, yang diberikan oleh properti AVEncCommonQuality . |
VBR tidak dibatasi | eAVEncCommonRateControlMode_UnconstrainedVBR | Encoder mencoba mencapai laju bit target yang diberikan oleh atribut MF_MT_AVG_BITRATE dalam jenis media output. Ini adalah mode default. |
Mode CBR dan VBR yang dibatasi memerlukan Windows 8.
Dalam Windows 8, encoder mengatur atribut berikut pada sampel output:
- MFSampleExtension_DecodeTimestamp
- MFSampleExtension_VideoEncodePictureType
- MFSampleExtension_VideoEncodeQP
Catatan
Versi dokumentasi sebelumnya salah menyatakan bahwa encoder didukung pada Windows Server 2008 R2.
Multiutas
Dalam Windows 8, encoder mendukung dua mode pengodean:
- Pengodean ilis. Dalam mode ini, irisan dikodekan secara paralel. Setiap ikatan dikodekan pada utas yang berbeda. Mode ini memiliki latensi rendah, karena satu gambar dikodekan secara paralel. Namun, pendekatan ini tidak menskalakan karena jumlah inti meningkat, karena jumlah irisan dibatasi oleh jumlah baris makroblock dalam gambar input.
- Pengodean multi-bingkai. Dalam mode ini, encoder menerima beberapa bingkai input dan mengodekannya secara paralel. Mode ini menskalakan lebih baik di lingkungan multicore, tetapi memperkenalkan lebih banyak latensi.
Encoder default untuk mengodekan, untuk meminimalkan latensi. Untuk mengaktifkan pengodean multi-bingkai, atur properti CODECAPI_AVLowLatencyMode ke VARIANT_FALSE.
Untuk mengatur jumlah utas pekerja yang digunakan oleh encoder, atur properti CODECAPI_AVEncNumWorkerThreads .
Di Windows 7, encoder selalu menggunakan pengodean ikatan.
Encoder Perangkat Keras Bersertifikat
Jika ada encoder perangkat keras bersertifikat, umumnya akan digunakan alih-alih encoder sistem kotak masuk untuk skenario terkait Media Foundation. Encoder bersertifikat diperlukan untuk mendukung sekumpulan properti ICodecAPI tertentu dan dapat secara opsional mendukung serangkaian properti lain. Proses sertifikasi harus menjamin bahwa properti yang diperlukan didukung dengan benar dan, jika properti opsional didukung, properti tersebut juga didukung dengan benar.
Berikut ini adalah sekumpulan properti ICodecAPI yang diperlukan dan opsional untuk encoder untuk meneruskan sertifikasi encoder HCK.
Properti ICodecAPI Windows 8 dan Windows 8.1 berikut diperlukan:
- CODECAPI_AVEncCommonRateControlMode
- CODECAPI_AVEncCommonQuality
- CODECAPI_AVEncCommonQualityVsSpeed
- CODECAPI_AVEncCommonMeanBitRate
- CODECAPI_AVEncCommonMaxBitRate
- CODECAPI_AVEncCommonBufferSize
- CODECAPI_AVEncMPVGOPSize
- CODECAPI_AVEncVideoEncodeQP
- CODECAPI_AVEncVideoForceKeyFrame
Properti ICodecAPI Windows 8.1 berikut bersifat opsional, tetapi diuji di HCK jika didukung.
- CODECAPI_AVEncVideoMinQP
- CODECAPI_AVEncVideoLTRBufferControl
- CODECAPI_AVEncVideoMarkLTRFrame
- CODECAPI_AVEncVideoUseLTRFrame
- CODECAPI_AVEncVideoEncodeFrameTypeQP
- CODECAPI_AVEncSliceControlMode
- CODECAPI_AVEncSliceControlSize
- CODECAPI_AVEncVideoMaxNumRefFrame
- CODECAPI_AVEncVideoMeanAbsoluteDifference
- CODECAPI_AVEncVideoMaxQP
- CODECAPI_AVEncVideoROIEnabled
- CODECAPI_AVEncVideoTemporalLayerCount (Dinamis)
- CODECAPI_AVEncH264CABACEnable
Properti ICodecAPI Windows 8 dan Windows 8.1 berikut bersifat opsional, tetapi diuji di HCK jika didukung.
Properti ICodecAPI berikut bersifat opsional. Mereka tidak diuji di HCK.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung |
Windows 7 [hanya aplikasi desktop] |
Server minimum yang didukung |
Tidak ada yang didukung |
DLL |
|
Lihat juga