编解码器实现

Windows 媒体音频和视频编解码器作为 COM 对象实现。 通常,编解码器实现为一对 COM 对象:一个用于编码器,一个用于解码器。 编码器具有类标识符(CLSID),解码器具有不同的 CLSID。 例如,Windows 媒体音频 9 编解码器的编码器部分具有由常量 CLSID_CWMAEncMediaObject表示的 CLSID,并且同一编解码器的解码器部分具有由常量 CLSID_CWMADecMediaObject表示的 CLSID。

在某些情况下,单个 COM 对象中包括多个编码器。 例如,Windows Media Video 9 编码器和 Windows Media Video 9.1 编码器都是同一 COM 对象的一部分。 因此,它们具有相同的 CLSID,由常量 CLSID_CWMV9EncMediaObject表示。 同样,某些 COM 对象包括多个解码器。

每个编码器或解码器对象公开 IMediaObject 接口,以便该对象可用作 DirectX 媒体对象(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。

 

除了核心接口,每个编码器或解码器对象还实现两个类似的接口,用于处理编解码器属性,IPropertyBagIPropertyStore。 旧版本的编码器和解码器对象用于 IPropertyBag,它通过包含属性名称的字符串值来标识每个属性。 IPropertyStore 是一个较新的接口,用于标识具有唯一属性值的属性。 添加了对 IPropertyStore 的支持,以提供对 MFT 的支持。 大多数 IPropertyBag 属性名称字符串都有相应的 IPropertyStore 属性键 GUID,大多数 GUID 都有相应的 IPropertyBag 名称字符串,但有一些例外。

本文档按属性键常量列出属性,但每个条目都包含属性名称字符串常量,以便在适当时与 IPropertyBag 一起使用。

Windows 媒体编解码器