编解码器实现

Windows Media 音频和视频编解码器作为 COM 对象实现。 通常,编解码器实现为一对 COM 对象:一个用于编码器,一个用于解码器。 编码器具有 CLSID) (类标识符,解码器具有不同的 CLSID。 例如,Windows Media Audio 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 编码器的实例,请使用 CLSID_CWMV9EncMediaObject,无论你打算将编码器用作 DMO 还是 MFT。 同样,对于大多数解码器,无论将解码器用作 DMO 还是 MFT,每个解码器都有一个 CLSID。

注意

上述语句存在一些例外情况,即对 DMO 和 MFT 使用单个 CLSID。 例如,MPEG-4 第 2 部分解码器在充当 DMO 时具有一个 CLSID,在充当 MFT 时具有另一个 CLSID。

 

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

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

Windows Media 编解码器