编码器实现和支持

在 Windows XP Service Pack 1 中,Microsoft 在 ksmedia.h 中定义了三个内核流式处理属性集和一个枚举,以支持仅视频编码器设备。 每个属性集都包含一个属性。 换句话说,每个属性都接收其自己的属性集。 如果驱动程序进行 get-propertySet-property 调用,则指定属性集的 GUID (,如 ksmedia.h) KSPROPERTY 结构的 Set 成员中定义,在设置调用时在 Id 成员中指定零:

属性 Set 说明
ENCAPIPARAM_BITRATE

实现此属性集以指定编码器设备支持的编码比特率。 有关更多详细信息,请参阅 编码器代码示例

ENCAPIPARAM_BITRATE_MODE

实现此属性集以指定设备支持的编码模式。 此属性集使用 VIDEOENCODER_BITRATE_MODE 枚举来指定支持的模式。 有关更多详细信息,请参阅 编码器代码示例

ENCAPIPARAM_PEAK_BITRATE

实现此属性集以指定设备的最大编码比特率。

客户端通过从 Windows 软件开发工具包 (SDK) 文档) 中所述的 IEncoderAPI COM 接口 (派生 IVideoEncoder COM 接口来访问这些属性。

微型驱动程序必须为每个 ENCAPIPARAM_Xxx 属性指定默认值。 主题 编码器代码示例 演示如何指定默认属性值。 在编码器筛选器的开发和调试过程中,可以从支持 ENCAPIPARAM_BITRATE 属性集的微型驱动程序触发当前属性页。

在 DirectX 9.0 中, ksmedia.h 中定义了六个附加属性集和一个事件集,以便更好地支持更广泛的编码器,包括仅音频编码器。 与 ENCAPIPARAM_Xxx 属性一样,每个属性都接收自己的属性集:

属性 Set 说明
CODECAPI_VIDEO_ENCODER

如果设备支持编码视频流 (包括辅助音频(如电视音频) 则实现对此属性集的支持。

CODECAPI_AUDIO_ENCODER

如果设备是仅限音频的编码器,则实现对此属性集的支持,而不是CODECAPI_VIDEO_ENCODER。

CODECAPI_SETALLDEFAULTS

实现此属性集以将编码器设备的所有内部设置(例如编码比特率和编码模式)重置为其默认值。

CODECAPI_ALLSETTINGS

实现此属性集以传达编码器设备的当前设置。 此属性集用于与客户端通信。

CODECAPI_SUPPORTSEVENTS

如果设备支持来自用户模式的事件(例如更改编码模式、比特率或其他设置),则实现此属性集。 如果实现此属性集,则还必须实现对 CODECAPI_CHANGELISTS 事件的支持。

CODECAPI_CURRENTCHANGELIST

实现此属性集以确定在上一次调用中更改的编码器参数,以设置一个或多个编码器属性。

事件集 说明

CODECAPI_CHANGELISTS

如果设备支持通过 CODECAPI_SUPPORTSEVENTS 属性集响应用户模式事件,则实现此事件集以返回编码器设置的列表,这些编码器设置由于客户端先前对 CODECAPI_SETALLDEFAULTS 或 CODECAPI_ALLSETTINGS的 Set-property 调用而更改。

客户端通过 Windows SDK 文档) 中所述的 ICodecAPI COM 接口 (访问这些属性。 有关 COM 接口的详细信息,包括如何指定 KsProxy 应公开的接口,请参阅 编码器安装和注册

微型驱动程序应实现对基本 get-property 查询的支持。 主题 编码器代码示例 演示如何支持 get-property 查询。

开发编码器筛选器时,请将编码功能移动到视频捕获筛选器的单独筛选器中。 定义自己的专用媒体,以便图形生成器可以正确连接编码器和捕获筛选器。 如果硬件能够总线控制非编码内容,则还可以公开公共媒体。 如果同时实现公共媒体和专用媒体,则首先列出专用媒体,因为它减少了图形生成时间;以在生成筛选器图时查找正确的筛选器。

有关在单独的筛选器图中使用介质和筛选器的多个实例 (的详细信息) 请参阅 媒体和类别