Codecimplementierung
Die Windows Medienaudio- und Videocodecs werden als COM-Objekte implementiert. In der Regel wird ein Codec als Paar von COM-Objekten implementiert: eines für den Encoder und eines für den Decoder. Der Encoder verfügt über einen Klassenbezeichner (CLSID), und der Decoder hat eine andere CLSID. Beispielsweise verfügt der Encoderteil des Windows Media Audio 9-Codecs über eine CLSID, die durch die Konstante CLSID _ CWMAEncMediaObject dargestellt wird, und der Decoderteil desselben Codecs verfügt über eine CLSID, die durch die Konstante CLSID _ CWMADecMediaObject dargestellt wird.
In einigen Fällen ist mehr als ein Encoder in einem einzelnen COM-Objekt enthalten. Beispielsweise sind der Windows Media Video 9-Encoder und der Windows Media Video 9.1-Encoder Teil desselben COM-Objekts. Folglich verfügen beide über die gleiche CLSID, die durch die Konstante CLSID _ CWMV9EncMediaObject dargestellt wird. Auf ähnliche Weise enthalten einige COM-Objekte mehr als einen Decoder.
Jedes Encoder- oder Decoderobjekt macht die IMediaObject-Schnittstelle verfügbar, sodass das Objekt als DirectX-Medienobjekt (DMO) und als EINETRANSFORM-Schnittstelle verwendet werden kann, sodass das Objekt als Media Foundation Transform (MFT) verwendet werden kann.
Für die meisten Encoder verwenden Sie die gleiche CLSID, unabhängig davon, ob Sie den Encoder als DMO oder MFT verwenden, um eine Instanz des Encoders zu erstellen. Um beispielsweise eine Instanz des Windows Media Video 9-Encoders zu erstellen, verwenden Sie CLSID _ CWMV9EncMediaObject, unabhängig davon, ob Sie den Encoder als DMO oder MFT verwenden möchten. Auf ähnliche Weise verfügt jeder Decoder für die meisten Decoder über eine einzelne CLSID, unabhängig davon, ob Sie den Decoder als DMO oder MFT verwenden.
Hinweis
Es gibt einige Ausnahmen von der vorherigen Anweisung zur Verwendung einer einzelnen CLSID sowohl für DMO als auch für MFT. Beispielsweise verfügt der MPEG-4 Part 2-Decoder über eine CLSID, wenn er als DMO und eine andere CLSID agiert, wenn er als MFT agiert.
Zusätzlich zu den Kernschnittstellen implementiert jedes Encoder- oder Decoderobjekt zwei ähnliche Schnittstellen für die Arbeit mit Codeceigenschaften: IPropertyBag und IPropertyStore. In älteren Versionen der Encoder- und Decoderobjekte wurde IPropertyBag verwendet, wodurch jede Eigenschaft durch einen Zeichenfolgenwert identifiziert wird, der einen Eigenschaftennamen enthält. IPropertyStore ist eine neuere Schnittstelle, die Eigenschaften mit einem eindeutigen Eigenschaftsschlüsselwert identifiziert. Unterstützung für IPropertyStore wurde hinzugefügt, um Unterstützung für MFTs zu bieten. Die meisten IPropertyBag-Eigenschaftennamenszeichenfolgen verfügen über eine entsprechende IPropertyStore-Eigenschaftsschlüssel-GUID, und die meisten GUIDs verfügen über eine entsprechende IPropertyBag-Namenszeichenfolge, mit einigen Ausnahmen.
In dieser Dokumentation werden die Eigenschaften nach Eigenschaftsschlüsselkonst constant aufgeführt, aber jeder Eintrag enthält die Eigenschaftsnamen-Zeichenfolgenkonst constant für die Verwendung mit IPropertyBag, falls zutreffend.