编码器 API

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

编码器 API 提供用于配置软件和硬件编码器的统一接口。 应用程序可以使用编码器 API 来配置编码器和存储配置设置。 编码器供应商可以使用编码器 API 来公开编码器的功能。 尽管编码器 API 主要用于编码器,但解码器也可以支持它,这已足够普遍。

编码器 API 通过 ICodecAPI 接口向应用程序公开,该接口由编码器筛选器公开。 编码器筛选器可以是本机 DirectShow 筛选器、硬件编码器或 DirectX 媒体对象 (DMO) 。

  • 软件筛选器:作为本机 DirectShow 筛选器实现的编码器应直接公开 ICodecAPI
  • 硬件编码器:编码设备通过一个或多个 AVStream 微型驱动程序公开,这些驱动程序在用户模式下由 KSProxy 表示。 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 键相邻的 Capabilities 键,或者可以使用功能位置键,如软件筛选器中所述。

创建 功能 键后,为每个功能 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”) 。

编码器和解码器开发