编解码器实现
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。
除了核心接口,每个编码器或解码器对象还实现两个类似的接口,用于处理编解码器属性 IPropertyBag 和 IPropertyStore。 较旧版本的编码器和解码器对象使用 IPropertyBag,它通过包含属性名称的字符串值来标识每个属性。 IPropertyStore 是一个较新的接口,用于标识具有唯一属性值的属性。 添加了对 IPropertyStore 的支持,以提供对 MMFT 的支持。 大多数 IPropertyBag 属性名称字符串都有相应的 IPropertyStore 属性键 GUID,并且大多数 GUID 都有相应的 IPropertyBag 名称字符串,但有一些例外情况。
本文档按属性键常量列出属性,但每个条目都包含属性名称字符串常量,以便在适当时与 IPropertyBag 一起使用。