H.264 視訊編碼器
Microsoft Media Foundation H.264 視訊編碼器是支援下列 H.264 設定檔的 媒體基礎轉換 :
- 基準設定檔
- 主要設定檔
- 高設定檔 (需要Windows 8)
H.264 視訊編碼器會公開下列介面:
輸入類型
輸入媒體類型必須具有下列其中一個子類型:
- MFVideoFormat_I420
- MFVideoFormat_IYUV
- MFVideoFormat_NV12
- MFVideoFormat_YUY2
- MFVideoFormat_YV12
如需這些子類型的詳細資訊,請參閱 影片子類型 GUID。
必須在輸入類型之前設定輸出類型。 在設定輸出類型之前,編碼器的 IMFTransform::SetInputType 方法會 傳回MF_E_TRANSFORM_TYPE_NOT_SET。
輸出型別
編碼器支援單一輸出子類型:
- MFVideoFormat_H264
在輸出媒體類型上設定下列屬性。
屬性 | 描述 |
---|---|
MF_MT_MAJOR_TYPE | 主要類型。 必須是 MFMediaType_Video。 |
MF_MT_SUBTYPE | 視訊子類型。 必須是 MFVideoFormat_H264。 |
MF_MT_AVG_BITRATE | 平均編碼的位元速率,以每秒的位數為單位。 必須大於零。 |
MF_MT_FRAME_RATE | 畫面播放速率。 |
MF_MT_FRAME_SIZE | 框架大小。 |
MF_MT_INTERLACE_MODE | 交錯模式。 |
MF_MT_MPEG2_PROFILE | H.264 編碼設定檔。 支援的值為:
|
MF_MT_MPEG2_LEVEL | 選擇性。 指定 H.264 編碼層級。 預設值為 –1,表示編碼器會選取編碼層級。 建議您不要在媒體類型中設定層級,並允許編碼器選取層級。 編碼器可以衍生指定視訊資料流程的適當層級,並考慮視訊的格式限制和特性。 For more information about profile and level constraints, refer to Annex A of ITU-T H.264. |
MF_MT_PIXEL_ASPECT_RATIO | 選擇性。 指定圖元外觀比例。 預設值為 1:1。 |
設定輸出類型之後,視訊編碼器會藉由新增 MF_MT_MPEG_SEQUENCE_HEADER 屬性來更新類型。 此屬性包含序列標頭。
編解碼器屬性
H.264 編碼器會實作 ICodecAPI 介面來設定編碼參數。 它支援下列屬性。
如需 HCK 編碼器認證的編解碼器需求,請參閱下方 的認證硬體編碼器 一節。
Windows 7 支援下列屬性。
屬性 | 描述 |
---|---|
CODECAPI_AVEncCommonRateControlMode | 設定速率控制模式。 請參閱<備註>。 預設模式是 VBR) 不受限制的變數位元速率 (。 |
CODECAPI_AVEncCommonQuality | 設定品質等級。 當速率控制模式是以品質為基礎的 VBR (eAVEncCommonRateControlMode_Quality) 時,就會套用此屬性。 有效範圍是 1-100。 預設值為 70。 若要設定此參數,請先設定 屬性,再呼叫 IMFTransform::SetOutputType。 若要在 Windows 7 中設定此參數,請在呼叫 IMFTransform::SetOutputType之前設定 屬性。 編碼器會在設定輸出類型之後忽略變更。 在 Windows 8 中,此屬性可以在編碼期間隨時設定。 變更會從下一個輸入框架開始套用。 在內部,編碼器會將此屬性轉換成 AVEncVideoEncodeQP 值。 |
下列屬性需要Windows 8。
屬性 | 描述 |
---|---|
CODECAPI_AVEncAdaptiveMode | 設定調適型編碼模式。 H.264 編碼器支援下列Windows 8模式:
|
CODECAPI_AVEncCommonBufferSize | 設定常數位元速率的緩衝區大小,以位元組為單位, (CBR) 編碼。 有效範圍為 [1 ...2¹-1]。 需要Windows 8。 |
CODECAPI_AVEncCommonMaxBitRate | 針對受限制的 VBR 編碼,指定每秒以位為單位清空「流失值區」的速率。 當速率控制模式 eAVEncCommonRateControlMode_PeakConstrainedVBR時,就會套用這個屬性。 有效範圍為 [1 ...2¹-1]。 |
CODECAPI_AVEncCommonMeanBitRate | 以每秒位為單位,設定編碼位資料流程的平均位元速率。 如果速率控制模式 eAVEncCommonRateControlMode_Quality,則會忽略這個屬性。 有效範圍為 [1 ...2¹-1]。 在 CBR 和未受限制的 VBR 模式中,平均位元速率會決定檔案的最終大小。 在 CBR 模式中,平均位元速率也是壓縮位從「流失貯體」清空的速率。 (如需詳細資訊,請參閱 流失貯體緩衝區模型。) 在 Windows 7 中,平均位元速率是由媒體類型上的 MF_MT_AVG_BITRATE 屬性所指定。 在 Windows 8中,您可以使用MF_MT_AVG_BITRATE屬性或CODECAPI_AVEncCommonMeanBitRate屬性來設定平均位元速率。 如果同時設定兩者,CODECAPI_AVEncCommonMeanBitRate覆寫。 在 Windows 8中,您可以在編碼期間設定平均位元速率。 如果位元速率變更,編碼器會使用自適性編碼。 |
CODECAPI_AVEncCommonQualityVsSpeed | 設定品質/速度取捨。 有效範圍:
此值會影響編碼器如何執行各種編碼作業,例如動作補償。 在較高的複雜度層級上,編碼器的執行速度較慢,但以相同的位元速率產生更佳的品質。 |
CODECAPI_AVEncH264CABACEnable | 啟用或停用適用于 H.264 entropy 編碼的 CABAC (內容調適型二進位算術編碼) 。 預設值 為 VARIANT_FALSE。 CABAC 不會用於基準設定檔。 |
CODECAPI_AVEncH264SPSID | 設定 H.264 位資料流程之 SPS NAL 單位中的 seq_parameter_set_id 值。 |
CODECAPI_AVEncMPVDefaultBPictureCount | 設定輸出位資料流程中連續 B 框架的最大數目。 有效值為:
針對 [基準設定檔],B 畫面格的數目一律為零。 編碼器會覆寫非零值。 對於其他 H.264 設定檔,如果此屬性為非零,編碼模式為 IBBPBBP,其中連續 B 畫面格的最大數目等於 CODECAPI_AVEncMPVDefaultBPictureCount。 |
CODECAPI_AVEncMPVGOPSize | 將一個 GOP 標頭的圖片數目設定為下一個,包括前置錨點,但不設定下列圖片。 有效範圍為 [0 ...2¹-1]。 如果為零,編碼器會選取 GOP 大小。 預設值為零。 |
CODECAPI_AVEncNumWorkerThreads | 設定編碼器所使用的背景工作執行緒數目。 有效範圍為 0–16。 如果為零,編碼器會選取執行緒數目。 |
CODECAPI_AVEncVideoContentType | 指出視訊內容類型。 |
CODECAPI_AVEncVideoEncodeQP | 有效範圍:16–51。 預設值為 24。 當速率控制模式 是eAVEncCommonRateControlMode_Quality時,就會套用這個屬性。 此屬性會設定與 AVEncCommonQuality相同的編碼設定。 不過, AVEncVideoEncodeQP 可讓應用程式直接指定 QP 的值。 如果同時設定這兩個屬性,AVEncVideoEncodeQP 會覆寫。 預設值 24 對應至 AVEncCommonQuality 設定的預設值 70。 |
CODECAPI_AVEncVideoForceKeyFrame | 強制編碼器將下一個畫面格編碼為主要畫面格。 |
CODECAPI_AVEncVideoMinQP | 有效範圍:0–51。 預設值為 0。 此屬性適用于所有速率控制模式。 編碼器不應產生低於 CODECAPI_AVEncVideoMinQP 屬性所指定值的 QP 值。 |
CODECAPI_AVLowLatencyMode | 啟用或停用低延遲模式。 請參閱一節中的。 |
備註
編碼器支援下列速率控制模式。
[模式] | 常數 | 描述 |
---|---|---|
CBR (固定位元速率) | eAVEncCommonRateControlMode_CBR | 編碼器會嘗試使用「流失貯體」模型來達到固定位元速率。 目標位元速率是由 CODECAPI_AVEncCommonMeanBitRate 屬性所指定。 需要Windows 8。 |
VBR) 的限制變數位元速率 ( | eAVEncCommonRateControlMode_PeakConstrainedVBR | 編碼器會使用具有尖峰位元速率的「流失貯體」模型。 流失貯體清空率是由 CODECAPI_AVEncCommonMaxBitRate 屬性所指定。 需要Windows 8。 |
以品質為基礎的變數位元速率 (VBR) | eAVEncCommonRateControlMode_Quality | 編碼器會嘗試達到 AVEncCommonQuality 屬性所提供的固定品質等級。 |
未受限制的 VBR | eAVEncCommonRateControlMode_UnconstrainedVBR | 編碼器會嘗試達到輸出媒體類型中 MF_MT_AVG_BITRATE 屬性所提供的目標位元速率。 這是預設模式。 |
CBR 和受限制的 VBR 模式需要Windows 8。
在 Windows 8 中,編碼器會在輸出範例上設定下列屬性:
- MFSampleExtension_DecodeTimestamp
- MFSampleExtension_VideoEncodePictureType
- MFSampleExtension_VideoEncodeQP
注意
舊版的檔錯誤指出 Windows Server 2008 R2 上支援編碼器。
多執行緒
在Windows 8中,編碼器支援兩種編碼模式:
- 配量編碼。 在此模式中,配量會以平行方式編碼。 每個配量都會在不同的執行緒上編碼。 此模式的延遲很低,因為單一圖片會以平行方式編碼。 不過,此方法不會隨著核心數目增加而調整,因為配量數目會受限於輸入圖片中的宏區塊資料列數目。
- 多畫面格編碼。 在此模式中,編碼器會接受多個輸入畫面,並以平行方式編碼。 此模式在多核心環境中會更妥善調整,但會產生更多延遲。
編碼器預設為配量編碼,以將延遲降到最低。 若要啟用多框架編碼,請將 CODECAPI_AVLowLatencyMode 屬性設定為 VARIANT_FALSE。
若要設定編碼器所使用的背景工作執行緒數目,請設定 CODECAPI_AVEncNumWorkerThreads 屬性。
在 Windows 7 中,編碼器一律會使用配量編碼。
認證的硬體編碼器
如果認證的硬體編碼器存在,通常會用於媒體基礎相關案例的收件匣系統編碼器。 需要認證的編碼器才能支援一組特定的 ICodecAPI 屬性,而且可以選擇性地支援另一組屬性。 認證程式應該保證已正確支援所需的屬性,而且如果支援選擇性屬性,也支援該屬性。
以下是編碼器傳遞 HCK 編碼器認證的必要和選擇性 ICodecAPI 屬性集。
需要下列Windows 8和Windows 8.1 ICodecAPI屬性:
- CODECAPI_AVEncCommonRateControlMode
- CODECAPI_AVEncCommonQuality
- CODECAPI_AVEncCommonQualityVsSpeed
- CODECAPI_AVEncCommonMeanBitRate
- CODECAPI_AVEncCommonMaxBitRate
- CODECAPI_AVEncCommonBufferSize
- CODECAPI_AVEncMPVGOPSize
- CODECAPI_AVEncVideoEncodeQP
- CODECAPI_AVEncVideoForceKeyFrame
下列Windows 8.1 ICodecAPI屬性是選擇性的,但如果支援,則會在 HCK 中測試。
- CODECAPI_AVEncVideoMinQP
- CODECAPI_AVEncVideoLTRBufferControl
- CODECAPI_AVEncVideoMarkLTRFrame
- CODECAPI_AVEncVideoUseLTRFrame
- CODECAPI_AVEncVideoEncodeFrameTypeQP
- CODECAPI_AVEncSliceControlMode
- CODECAPI_AVEncSliceControlSize
- CODECAPI_AVEncVideoMaxNumRefFrame
- CODECAPI_AVEncVideoMeanAbsoluteDifference
- CODECAPI_AVEncVideoMaxQP
- CODECAPI_AVEncVideoROIEnabled
- CODECAPI_AVEncVideoTemporalLayerCount (Dynamic)
- CODECAPI_AVEncH264CABACEnable
下列Windows 8和Windows 8.1 ICodecAPI屬性是選擇性的,但如果支援,則會在 HCK 中進行測試。
下列 ICodecAPI 屬性是選擇性的。 它們不會在 HCK 中測試。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 |
Windows 7 [僅限傳統型應用程式] |
最低支援的伺服器 |
都不支援 |
DLL |
|
另請參閱