编码器 API
[与此页面关联的功能(DirectShow)是一项旧功能。 它已被 MediaPlayer、IMFMediaEngine取代,并在媒体基金会 音频/视频捕获。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayer、IMFMediaEngine 和 Media Foundation 中的音频/视频捕获,而不是 DirectShow。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]
编码器 API 提供用于配置软件和硬件编码器的统一接口。 应用程序可以使用编码器 API 配置编码器并存储配置设置。 编码器供应商可以使用编码器 API 公开编码器的功能。 虽然编码器 API 主要用于编码器,但解码器也可以支持它。
编码器 API 通过 ICodecAPI 接口向应用程序公开,该接口由编码器筛选器公开。 编码器筛选器可以是本机 DirectShow 筛选器、硬件编码器或 DirectX 媒体对象(DMO)。
- 软件筛选器:作为本机 DirectShow 筛选器实现的编码器应直接公开 ICodecAPI。
- 硬件编码器:编码设备通过 KSProxy 以用户模式表示的一个或多个 AVStream 微型驱动程序公开。 KSProxy 将 ICodecAPI 方法调用转换为 KS 属性集。 有关详细信息,请参阅 DDK 文档。
- DMO:DMO 应公开 ICodecAPI 接口。 DirectShow 应用程序可以通过聚合 DMO 来查询 DMO 包装器筛选器,该筛选器公开接口。 不基于 DirectShow 的应用程序可以直接查询 DMO。
编码器 Capabilties
编码器可以通过将其存储在系统注册表中来注册高级功能列表。 每个功能由 GUID 标识。 若要枚举特定编码器的功能,请执行以下作:
- 创建表示编码器筛选器的名字对象。 (请参阅 使用系统设备枚举器。)
- 查询 IGetCapabilitiesKey 接口的筛选器名字对象。
- 调用 IGetCapabilitiesKey::GetCapabilitiesKey。 该方法将返回包含筛选器功能列表的注册表项的句柄。
- 调用 RegEnumValue 函数来枚举返回的键的值。
如果要开发编码器,请在注册筛选器时为功能创建注册表项。 对于软件筛选器,请创建一个名为 功能 的键,该键与 FilterData 和 FriendlyName 键相邻。 通常,在调用 AMovieDllRegisterServer2 以注册标准筛选器数据后添加此信息。 有关详细信息,请参阅 如何注册 DirectShow 筛选器。 或者,可以创建一个 CapabilitiesLocation 键,其中包含一个字符串,该字符串提供注册表中 功能 键的位置。 字符串应以“HKLM\”、“HKCR\”或“HKCU\”开头,以指示注册表子树。 对于即插即用设备,驱动程序的设置文件应创建与筛选器的 FriendlyName 键相邻的 功能 键,也可以使用软件筛选器所述的 CapabilitiesLocation 键。
创建 功能 键后,为每个功能 GUID 创建一个值。 值的名称应为 GUID 的字符串形式,格式为 {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
。 每个值类型应为下列值之一:
- 单个数值。 使用 DWORD 值。
- GUID。 使用 GUID 的字符串形式。
- 数字对。 使用格式为“a,b”的字符串来表示值对,例如宽度和高度,或分数的分母和分母。
- 值的数组。 使用多字符串(REG_SZ_MULTI)来表示多个值。
以下示例显示了软件筛选器的注册表布局:
\HKCR\CLSID\Filter Category\Instance\Filter CLSID\Capabilities\
Values:
guid1: 1234 (REG_DWORD)
guid2: "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" (REG_SZ)
guid3: "2","4","6" (REG_SZ_MULTI)
guid4: "720,480" (REG_SZ)
编码器配置文件
编码器配置文件 是可在运行时应用于编码器的配置设置的固定列表。 配置文件独立于编码器;应用程序可以选择编码器,然后选择配置文件并将配置文件设置应用到编码器。 配置文件由 GUID 标识,应存储在注册表中的以下位置:
\HKLM\Software\Microsoft\EncoderProfiles\Profile GUID\
其中 配置文件 GUID
是标识配置文件的 GUID 的字符串形式。 为每个设置创建值。 同时创建一个名为“FriendlyName”的字符串值,其数据标识配置文件(如“LowBandwidthVideo”)。
相关主题