Codec 實作

Windows 媒體音訊和視訊編解碼器會實作為 COM 物件。 一般而言,編解碼器會實作為一對 COM 物件:一個用於編碼器,另一個用於解碼器。 編碼器有類別識別碼 (CLSID) ,解碼器有不同的 CLSID。 例如,Windows Media Audio 9 編解碼器的編碼器部分具有由常數 CLSID_CWMAEncMediaObject表示的 CLSID,而相同編解碼器的解碼器部分則以常數 CLSID_CWMADecMediaObject表示。

在某些情況下,單一 COM 物件中會包含一個以上的編碼器。 例如,Windows Media Video 9 編碼器和 Windows Media Video 9.1 編碼器都是相同 COM 物件的一部分。 因此,兩者都有相同的 CLSID,由常數 CLSID_CWMV9EncMediaObject表示。 同樣地,某些 COM 物件也包含一個以上的解碼器。

每個編碼器或解碼器物件都會公開 IMediaObject 介面,讓物件可以做為 DirectX Media Object (DMO) 和 IMFTransform 介面,讓物件可作為 Media Foundation Transform (MFT) 。

對於大部分編碼器,不論您使用編碼器做為 DMO 還是 MFT,您都會使用相同的 CLSID 來建立編碼器的實例。 例如,若要建立 Windows Media Video 9 編碼器的實例,不論您想要使用編碼器做為 DMO 還是 MFT,您都會使用 CLSID_CWMV9EncMediaObject。 同樣地,對於大部分解碼器,不論您使用解碼器做為 DMO 或 MFT,每個解碼器都有單一 CLSID。

注意

上述語句有一些關於針對 DMO 和 MFT 使用單一 CLSID 的例外狀況。 例如,當 MPEG-4 第 2 部分解碼器做為 DMO 時,有一個 CLSID,而當它做為 MFT 時則有不同的 CLSID。

 

除了核心介面之外,每個編碼器或解碼器物件還會實作兩個類似的介面,以使用編解碼器屬性 IPropertyBagIPropertyStore。 舊版的編碼器和解碼器物件使用 IPropertyBag,以包含屬性名稱的字串值來識別每個屬性。 IPropertyStore 是較新的介面,可識別具有唯一屬性值的屬性。 已新增 IPropertyStore 的支援,以提供 MFT 的支援。 大部分 的 IPropertyBag 屬性名稱字串都有對應的 IPropertyStore 屬性索引鍵 GUID,而大部分 GUID 都有對應的 IPropertyBag 名稱字串,但有一些例外狀況。

本檔會依屬性索引鍵常數列出屬性,但每個專案都包含屬性名稱字串常數,以在適當情況下與 IPropertyBag 搭配使用。

Windows Media 轉碼器