关于 DirectShow 筛选器

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

DirectShow 使用模块化体系结构,其中每个处理阶段都由名为筛选器的 COM 对象完成。 DirectShow 提供了一组标准筛选器供应用程序使用,开发人员可以编写自己的自定义筛选器来扩展 DirectShow 的功能。 为了说明,下面是播放 AVI 视频文件所需的步骤,以及执行每个步骤的筛选器:

  • 以字节流 (文件源筛选器) 读取文件的原始数据。
  • 检查 AVI 标头,并将字节流分析为单独的视频帧和音频样本, (AVI 拆分器筛选器) 。
  • 根据压缩格式) , (各种解码器筛选器对视频帧进行解码。
  • (视频呈现器筛选器) 绘制视频帧。
  • 将音频样本发送到声音卡 (默认 DirectSound 设备筛选器) 。

下图显示了这些筛选器。

使用压缩视频播放 avi 文件的筛选器图

如图所示,每个筛选器都连接到一个或多个其他筛选器。 连接点也是 COM 对象,称为 引脚。 筛选器使用引脚从一个筛选器移动到下一个筛选器中的数据。 图中的箭头显示数据移动的方向。 在 DirectShow 中,一组筛选器称为 筛选器图

筛选器有三种可能的状态:运行、停止和暂停。 筛选器运行时,它会处理媒体数据。 停止时,它将停止处理数据。 暂停状态用于在运行前提示数据;筛选器图中数据流部分更详细地介绍了此概念。 在极少数情况下,状态更改在整个筛选器图中协调;图中的所有筛选器以一致的方式切换状态。 因此,整个筛选器图也处于运行、停止或暂停状态。

筛选器可以分为多个大类:

  • 筛选器将数据引入图形。 数据可能来自文件、网络、相机或其他任何位置。 每个源筛选器处理不同类型的数据源。
  • 转换筛选器采用输入流、处理数据并创建输出流。 编码器和解码器是转换筛选器的示例。
  • 呈现器 筛选器位于链的末尾。 他们接收数据并将其呈现给用户。 例如,视频呈现器在显示器上绘制视频帧;音频呈现器将音频数据发送到声音卡;文件编写器筛选器将数据写入文件。
  • 拆分器筛选器将输入流拆分为两个或多个输出,通常在此过程中分析输入流。 例如,AVI 拆分器将字节流分析为单独的视频流和音频流。
  • 复用筛选器采用多个输入,并将其合并到单个流中。 例如,AVI 复用器执行 AVI 拆分器反运算。 它采用音频和视频流,并生成 AVI 格式的字节流。

这些类别之间的区别不是绝对的。 例如,ASF 读取器筛选器同时充当源筛选器和拆分器筛选器。

所有 DirectShow 筛选器都公开 IBaseFilter 接口,所有引脚都公开 IPin 接口。 DirectShow 还定义了许多其他支持更具体功能的接口。

关于 Filter Graph 管理器

筛选器图中的数据流

DirectShow 筛选器