硬件设备如何参与筛选器图

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

本文介绍 DirectShow 如何与音频和视频硬件交互。

包装器筛选器

所有 DirectShow 筛选器都是用户模式软件组件。 为了使内核模式硬件设备(如视频捕获卡)加入 DirectShow 筛选器图,设备必须表示为用户模式筛选器。 此函数由 DirectShow 提供的专用“包装器”筛选器执行。 这些筛选器包括 音频捕获 筛选器、 VFW 捕获 筛选器、 电视调谐器 筛选器、 电视音频 筛选器和 模拟视频横杠 筛选器。 DirectShow 还提供名为 KsProxy 的筛选器,该筛选器可以表示任何类型的 Windows 驱动程序模型 (WDM) 流式处理设备。 硬件供应商可以通过提供 Ksproxy 插件(由 KsProxy 聚合的 COM 对象)来扩展 KsProxy 以支持自定义功能。

包装器筛选器公开表示设备功能的 COM 接口。 应用程序使用这些接口向筛选器传递和从筛选器传递信息。 筛选器将 COM 方法调用转换为设备驱动程序调用,在内核模式下将该信息传递给驱动程序,然后将结果转换回应用程序。 电视调谐器、电视音频、模拟视频交叉栏和 KsProxy 筛选器通过 IKsPropertySet 接口支持自定义驱动程序属性。 VFW 捕获筛选器和音频捕获筛选器不是以这种方式扩展的。

对于应用程序开发人员,包装器筛选器使应用程序能够像控制任何其他 DirectShow 筛选器一样控制设备。 无需特殊编程;与内核模式设备通信的详细信息封装在筛选器中。

Windows 设备视频

VFW 捕获筛选器支持 Windows (VfW) 捕获卡的早期视频。 当目标系统上存在 VfW 卡时,可以使用 DirectShow 系统设备枚举器发现它并将其添加到筛选器图中。 有关详细信息,请参阅 枚举设备和筛选器

音频捕获和混音设备 (声卡)

较新的声卡具有用于麦克风和其他类型的设备的输入插孔。 通常,这些卡还具有板载混合功能,用于控制每个输入的音量、高音和低音。 在 DirectShow 中,声音卡的输入和混音器由音频捕获筛选器包装。 可以使用系统设备枚举器发现每个声音卡。 若要查看系统中的声卡,请运行 GraphEdit 并从“音频捕获源”类别中进行选择。 该类别中的每个筛选器都是音频捕获筛选器的单独实例。 (请参阅 使用 GraphEdit.)

WDM 流式处理设备

较新的硬件解码器和捕获卡符合 Windows 驱动程序模型 (WDM) 规范。 这些设备比 VfW 设备具有更大的功能。 WDM 视频捕获卡可以支持 VfW 下不可用的功能,包括捕获格式的枚举、视频参数(如色调和亮度)的编程控制、编程输入选择和电视调谐器支持。

为了支持 WDM 流式处理设备,DirectShow 提供了 KsProxy 筛选器 (ksproxy.ax) 。 KsProxy被称为“瑞士军刀过滤器”,因为它做许多不同的事情。 筛选器上的引脚数以及筛选器公开的 COM 接口数取决于基础驱动程序的功能。 KsProxy 不会显示在名称“KsProxy”下的筛选器图中。它始终采用在注册表中找到的设备的友好名称。 若要查看系统上的 WDM 设备,请运行 GraphEdit 并从 WDM 流式处理类别中进行选择。 即使系统上只有一个 WDM 卡,该卡也可能包含多个设备。 每个设备都表示为单独的筛选器,其中每个筛选器实际上都是 KsProxy。

应用程序使用系统设备枚举器查找系统上的 WDM 设备名字对象。 KsProxy 通过在名字对象上调用 BindToObject 来实例化。 由于 KsProxy 可以表示所有类型的 WDM 设备,因此它必须查询驱动程序以确定驱动程序支持的属性集。 属性集是 WDM 驱动程序以及某些用户模式筛选器(如 MPEG-2 软件解码器)使用的数据结构的集合。 KsProxy 将自身配置为公开与这些属性集对应的 COM 接口。 KsProxy 将 COM 方法调用转换为属性集,并将其发送到驱动程序。 硬件供应商可以通过提供插件来扩展 KsProxy,插件是供应商特定的接口,用于公开设备的特殊功能。 所有这些详细信息都对应用程序隐藏。 应用程序通过 KsProxy 控制设备,其方式与任何其他 DirectShow 筛选器的方式相同。

内核流式处理

WDM 设备支持内核流式处理,其中数据完全在内核模式下流式传输,而无需切换到用户模式。 在内核模式和用户模式之间切换计算成本高昂;内核流式处理允许高比特率,而不会给主机 CPU 带来负担。 基于 WDM 的筛选器可以使用内核流式处理将多媒体数据从一个硬件设备直接传递到另一个硬件设备,无论是在同一个卡上还是在不同的卡,而无需将数据复制到系统的main内存中。

从应用程序的角度来看,数据似乎从一个用户模式筛选器移动到下一个用户模式筛选器。 实际上,数据可能根本不会进入用户模式,而是可以直接从一个内核模式设备流式传输到另一个内核模式设备,直到在视频图形上呈现卡。 某些方案(如捕获到文件)要求数据在某个时间点从内核模式传递到用户模式。 但是,此开关不一定要求将数据复制到内存中的新位置。

应用程序开发人员通常不需要关注内核流式处理的详细信息,但背景信息除外。 有关 WDM、内核流式处理、KsProxy 和相关主题的更多详细信息,请参阅 Microsoft DDK。

筛选器图及其组件