运输
[与此页面关联的功能(DirectShow)是一项旧功能。 它已被 MediaPlayer、IMFMediaEngine取代,并在媒体基金会 音频/视频捕获。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayer、IMFMediaEngine 和 Media Foundation 中的音频/视频捕获,而不是 DirectShow。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]
为了通过筛选器图移动媒体数据,DirectShow 筛选器必须支持多种可能的协议之一。 这些协议称为传输。 当两个筛选器连接时,它们必须支持相同的传输;否则,它们无法交换媒体数据。 通常,传输要求其中一个引脚支持特定接口。 筛选器连接时,一个引脚会查询另一个用于接口。
大多数 DirectShow 筛选器在主内存中保存媒体数据,并将其传送到跨引脚连接的其他筛选器。 这种类型的传输称为本地内存传输。 虽然本地内存传输是 DirectShow 中最常见的传输,但并非所有筛选器都使用它。 例如,某些筛选器沿硬件路径发送媒体数据,并使用引脚仅传递控制信息。 例如,请参阅 IOverlay 接口。
DirectShow 为本地内存传输、推送模型和拉取模型定义了两种机制。 在推送模型中,源筛选器生成数据并将其传递到下游的下一个筛选器。 该筛选器被动接收数据、处理数据并将其发送到下游。 在拉取模型中,源筛选器连接到分析器筛选器。 分析程序筛选器从源筛选器请求数据。 源筛选器通过传递数据来响应请求。 推送模型使用 IMemInputPin 接口,拉取模型使用 IAsyncReader 接口。
推送模型比拉取模型更常见。 因此,以下文章假定推送模型。 本部分中的最后一篇文章 拉取模型介绍了 IAsyncReader 接口与 IMemInputPin有何区别。
相关主题
-
筛选器图 中的 数据流