固定连接

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

筛选器通过 IPin 接口在其引脚处连接。 输出引脚连接到输入引脚。 每个引脚连接都有一种媒体类型,由 AM_MEDIA_TYPE 结构描述。

应用程序通过调用筛选器关系图管理器上的方法来连接筛选器,从不通过对筛选器或固定本身调用方法来连接筛选器。 应用程序可以通过调用 IFilterGraph::ConnectDirectIGraphBuilder::Connect 方法直接指定要连接的筛选器;或者,它可以使用图形生成方法(如 IGraphBuilder::RenderFile)间接连接筛选器。

要使连接成功,这两个筛选器都必须位于筛选器图中。 应用程序可以通过调用 IFilterGraph::AddFilter 方法向图形添加筛选器。 筛选器关系图管理器也可以向关系图添加筛选器。 添加筛选器时,筛选器关系图管理器会调用筛选器的 IBaseFilter::JoinFilterGraph 方法来通知筛选器。

连接过程的一般概述如下:

  1. 筛选器图管理器在输出引脚上调用 IPin::Connect ,将指针传递到输入引脚。
  2. 如果输出引脚接受连接,它将在输入引脚上调用 IPin::ReceiveConnection
  3. 如果输入引脚也接受连接,则连接尝试成功,并且引脚已连接。

筛选器处于活动状态时,某些引脚可能会断开连接并重新连接。 这种类型的重新连接称为 动态 重新连接。 有关详细信息,请参阅 动态图形生成。 但是,大多数筛选器不支持动态重新连接。

筛选器通常按下游顺序连接,换言之,筛选器的输入引脚在其输出引脚之前连接。 筛选器应始终支持此连接顺序。 某些筛选器还支持相反顺序的连接- 先是输出引脚,然后是输入引脚。 例如,在连接 MUX 筛选器的输入引脚之前,可以将 MUX 筛选器的输出引脚连接到文件编写器筛选器。

调用引脚的 ConnectReceiveConnection 方法时,引脚必须验证它是否支持该连接。 详细信息取决于特定筛选器。 最常见的任务包括:

  • 检查媒体类型是否可接受
  • 协商分配器
  • 查询其他引脚以获取所需的接口。