編解碼器實作
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 物件 (DMO) 和 IMFTransform 介面,讓物件可作為媒體基礎轉換 (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。
除了核心介面之外,每個編碼器或譯碼器對象都會實作兩個類似的介面,以便處理編解碼器屬性,IPropertyBag 和 IPropertyStore。 舊版的編碼器和譯碼器物件,IPropertyBag,它會以包含屬性名稱的字串值來識別每個屬性。 IPropertyStore 是較新的介面,可識別具有唯一屬性值的屬性。 已新增 IPropertyStore 的支援,以提供 MFT 的支援。 大部分 IPropertyBag 屬性名稱字串都有對應的 IPropertyStore 屬性索引鍵 GUID,而且大多數 GUID 都有對應的 IPropertyBag 名稱字元串,但有一些例外。
本檔會依屬性索引鍵常數列出屬性,但每個專案都包含屬性名稱字串常數,以適當時搭配 IPropertyBag 使用。