Share via


編碼器 API

[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。

編碼器 API 提供統一介面來設定軟體和硬體編碼器。 應用程式可以使用編碼器 API 來設定編碼器,以及儲存組態設定。 編碼器廠商可以使用編碼器 API 來公開編碼器的功能。 雖然編碼器 API 主要是針對編碼器所設計,但解碼器也可以支援編碼器。

編碼器 API 會透過 ICodecAPI 介面向應用程式公開,編碼器篩選器會公開此介面。 編碼器篩選器可能是原生 DirectShow 篩選、硬體編碼器或 DirectX 媒體物件 (DMO) 。

  • 軟體篩選:實作為原生 DirectShow 篩選的編碼器應該直接公開 ICodecAPI
  • 硬體編碼器:編碼裝置會透過 KSProxy 以使用者模式表示的一或多個 AVStream 迷你驅動程式公開。 KSProxy 會將 ICodecAPI 方法呼叫轉譯成 KS 屬性集。 如需詳細資訊,請參閱 DDK 檔。
  • DMO:DMO 應該公開 ICodecAPI 介面。 DirectShow 應用程式可以查詢 DMO 包裝函式篩選,藉由匯總 DMO 來公開介面。 不是以 DirectShow 為基礎的應用程式可以直接查詢 DMO。

編碼器 Capabilties

編碼器可以藉由將其儲存在系統登錄中來註冊高階功能清單。 每個功能都是由 GUID 識別。 若要列舉特定編碼器的功能,請執行下列動作:

  1. 建立代表編碼器篩選的 Moniker。 (請參閱 使用系統裝置列舉值.)
  2. 查詢 IGetCapabilitiesKey 介面的篩選 Moniker。
  3. 呼叫 IGetCapabilitiesKey::GetCapabilitiesKey。 方法會傳回包含篩選功能清單之登錄機碼的控制碼。
  4. 呼叫 RegEnumValue 函式來列舉傳回索引鍵的值。

如果您要開發編碼器,請在註冊篩選時,為功能建立登錄專案。 針對軟體篩選,建立名為 Capabilities 的索引鍵,其與 FilterDataFriendlyName 索引鍵相鄰。 一般而言,您會在呼叫 AMovieDllRegisterServer2 以註冊標準篩選資料之後新增這項資訊。 如需詳細資訊,請參閱 如何註冊 DirectShow 篩選。 或者,您可以建立 CapabilitiesLocation 機碼,其中包含字串,提供登錄中 Capabilities 機碼的位置。 字串應以 「HKLM\」、「HKCR\」 或 「HKCU\」 開頭,以指出登錄子樹。 針對隨插即用裝置,驅動程式的安裝程式檔案應該會建立與篩選的FriendlyName機碼相鄰的 Capabilities機碼,或者可以使用CapabilitiesLocation機碼,如軟體篩選中所述。

建立 功能 索引鍵之後,請為每個功能 GUID 建立值。 值的名稱應該是 GUID 的字串形式,格式 {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} 為 。 每個實數值型別都應該是下列其中一項:

  • 單一數值。 使用 DWORD 值。
  • GUID。 使用 GUID 的字串形式。
  • 數值組。 使用格式為 「a,b」 的字串來表示值組,例如寬度和高度,或分數的分母和分母。
  • 值的陣列。 使用多字串 (REG_SZ_MULTI) 來表示多個值。

下列範例顯示軟體篩選器的登錄配置:

\HKCR\CLSID\Filter Category\Instance\Filter CLSID\Capabilities\
    
Values: 
    
    guid1: 1234 (REG_DWORD)   
    
    guid2: "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" (REG_SZ)
    
    guid3: "2","4","6" (REG_SZ_MULTI)
    
    guid4: "720,480" (REG_SZ) 

編碼器設定檔

編碼器設定檔是可在執行時間套用至編碼器的固定組態設定清單。 設定檔與編碼器無關;應用程式可以選取編碼器,然後選取設定檔,並將設定檔設定套用至編碼器。 設定檔是由 GUID 識別,而且應該儲存在登錄中的下列位置:

\HKLM\Software\Microsoft\EncoderProfiles\Profile GUID\

其中 設定檔 GUID

是識別設定檔之 GUID 的字串形式。 為每個設定建立值。 另建立名為 「FriendlyName」 的字串值,其資料會識別設定檔 (,例如 「LowBandwidthVideo」) 。

編碼器和解碼器開發