拉取模型

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

IMemInputPin 接口中,上游筛选器确定要发送的数据,并将数据推送到下游筛选器。 对于某些筛选器, 取模型更合适。 此处,下游筛选器从上游筛选器请求数据。 样本仍会从输出引脚到输入引脚向下游移动,但下游筛选器会启动数据流。 这种类型的连接使用 IAsyncReader 接口。

拉取模型的典型用途是在文件播放中。 例如,在 AVI 播放图中, 异步文件源 筛选器执行一般文件读取操作,并将数据作为字节流传递,而没有格式信息。 AVI 拆分器筛选器读取 AVI 标头并将流分析为视频和音频样本。 与异步文件源筛选器相比,AVI 拆分器可以确定所需的数据,因此它使用 IAsyncReader 而不是 IMemInputPin

若要从输出引脚请求数据,输入引脚调用以下方法之一:

第一种方法是异步的,用于支持多个重叠读取。 其他是同步的。

理论上,任何筛选器都可以支持 IAsyncReader,但在实践中,它专为连接到分析程序筛选器的源筛选器而设计。 分析程序的作用非常类似于推送模型中的源筛选器。 暂停时,它会创建一个流式处理线程,该线程从 IAsyncReader 连接拉取数据并将其推送到下游。 输出引脚使用 IMemInputPin,图形的其余部分使用标准推送模型。

筛选器图中的数据流