编码器 API

[与此页面关联的功能(DirectShow)是一项旧功能。 它已被 MediaPlayerIMFMediaEngine取代,并在媒体基金会 音频/视频捕获。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia 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 标识。 若要枚举特定编码器的功能,请执行以下作:

  1. 创建表示编码器筛选器的名字对象。 (请参阅 使用系统设备枚举器。)
  2. 查询 IGetCapabilitiesKey 接口的筛选器名字对象。
  3. 调用 IGetCapabilitiesKey::GetCapabilitiesKey。 该方法将返回包含筛选器功能列表的注册表项的句柄。
  4. 调用 RegEnumValue 函数来枚举返回的键的值。

如果要开发编码器,请在注册筛选器时为功能创建注册表项。 对于软件筛选器,请创建一个名为 功能 的键,该键与 FilterDataFriendlyName 键相邻。 通常,在调用 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”)。

编码器和解码器开发