共用方式為


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 編碼設定檔。
支援的值為:
  • eAVEncH264VProfile_Base 預設 ()
  • eAVEncH264VProfile_Main
  • eAVEncH264VProfile_High (需要Windows 8)
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模式:
  • eAVEncAdaptiveMode_None。 沒有調適型編碼。 (預設值。)
  • eAVEncAdaptiveMode_FrameRate。 彈性地變更畫面播放速率。

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 設定品質/速度取捨。 有效範圍:
  • 0–33:低複雜度
  • 34–66:中度複雜度 (預設)
  • 67–100:高複雜性

此值會影響編碼器如何執行各種編碼作業,例如動作補償。 在較高的複雜度層級上,編碼器的執行速度較慢,但以相同的位元速率產生更佳的品質。
CODECAPI_AVEncH264CABACEnable 啟用或停用適用于 H.264 entropy 編碼的 CABAC (內容調適型二進位算術編碼) 。 預設值 為 VARIANT_FALSE
CABAC 不會用於基準設定檔。
CODECAPI_AVEncH264SPSID 設定 H.264 位資料流程之 SPS NAL 單位中的 seq_parameter_set_id 值。
CODECAPI_AVEncMPVDefaultBPictureCount 設定輸出位資料流程中連續 B 框架的最大數目。 有效值為:
  • 0:請勿使用 B 框架 (預設) 。
  • 1:使用一個 B 框架。
  • 2:使用兩個 B 框架。
若要設定此參數,請先設定 屬性,再呼叫 IMFTransform::SetOutputType
針對 [基準設定檔],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 中,編碼器會在輸出範例上設定下列屬性:

注意

舊版的檔錯誤指出 Windows Server 2008 R2 上支援編碼器。

 

多執行緒

在Windows 8中,編碼器支援兩種編碼模式:

  • 配量編碼。 在此模式中,配量會以平行方式編碼。 每個配量都會在不同的執行緒上編碼。 此模式的延遲很低,因為單一圖片會以平行方式編碼。 不過,此方法不會隨著核心數目增加而調整,因為配量數目會受限於輸入圖片中的宏區塊資料列數目。
  • 多畫面格編碼。 在此模式中,編碼器會接受多個輸入畫面,並以平行方式編碼。 此模式在多核心環境中會更妥善調整,但會產生更多延遲。

編碼器預設為配量編碼,以將延遲降到最低。 若要啟用多框架編碼,請將 CODECAPI_AVLowLatencyMode 屬性設定為 VARIANT_FALSE

若要設定編碼器所使用的背景工作執行緒數目,請設定 CODECAPI_AVEncNumWorkerThreads 屬性。

在 Windows 7 中,編碼器一律會使用配量編碼。

認證的硬體編碼器

如果認證的硬體編碼器存在,通常會用於媒體基礎相關案例的收件匣系統編碼器。 需要認證的編碼器才能支援一組特定的 ICodecAPI 屬性,而且可以選擇性地支援另一組屬性。 認證程式應該保證已正確支援所需的屬性,而且如果支援選擇性屬性,也支援該屬性。

以下是編碼器傳遞 HCK 編碼器認證的必要和選擇性 ICodecAPI 屬性集。

需要下列Windows 8和Windows 8.1 ICodecAPI屬性:

下列Windows 8.1 ICodecAPI屬性是選擇性的,但如果支援,則會在 HCK 中測試。

下列Windows 8和Windows 8.1 ICodecAPI屬性是選擇性的,但如果支援,則會在 HCK 中進行測試。

下列 ICodecAPI 屬性是選擇性的。 它們不會在 HCK 中測試。

規格需求

需求
最低支援的用戶端
Windows 7 [僅限傳統型應用程式]
最低支援的伺服器
都不支援
DLL
Mfh264enc.dll

另請參閱

編解碼器物件

媒體基礎中的 MPEG-4 支援

媒體基礎中支援的媒體格式

視訊媒體類型