使用 DirectShow EVR 筛选器

[此页中所述的组件增强的视频呈现器是一项旧功能。 它已由通过 MediaPlayerIMFMediaEngine 组件公开的简单视频呈现器 (SVR) 取代。 若要播放视频内容,应将数据发送到其中一个组件,并允许它们实例化新的视频呈现器。 这些组件已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft 强烈建议新代码在 Windows 中尽可能使用 MediaPlayer 或较低级别的 IMFMediaEngine API 而不是 EVR 播放视频媒体。 如果可能,Microsoft 建议应重写使用旧 API 的现有代码,以尽可能地使用新的 API。]

若要创建增强的视频呈现器 (EVR) 筛选器,请调用 CoCreateInstance。 CLSID CLSID_EnhancedVideoRenderer,在 uuids.h 中定义。 无需调用 MFStartupMFShutdown 即可使用 EVR 筛选器。

有关在 DirectShow 应用程序中使用 EVR 筛选器的详细信息,请参阅 DirectShow 中的音频/视频播放

EVR 筛选器以一个输入引脚开头,对应于引用流。 若要为子流添加引脚,请查询 IEVRFilterConfig 接口的筛选器,并调用 IEVRFilterConfig::SetNumberOfStreams。 在连接任何输入引脚之前调用此方法。 引脚 0 始终是引用流。 在任何其他引脚之前连接此引脚,因为引用流的格式可能会限制有哪些子流格式可用。

在开始绘制图形之前,请设置视频剪辑窗口和目标矩形。 有关详细信息,请参阅“使用视频显示控件”。

与视频混合呈现器 (VMR) 不同,EVR 没有模式(窗口化、无窗口等)。 具体而言:

  • EVR 不支持窗口化模式。 应用程序必须提供剪辑窗口。
  • EVR 没有无呈现模式。 若要替换默认演示者,请调用 IMFVideoRenderer::InitializeRenderer
  • EVR 没有混合模式。 EVR 始终会创建混音器。 如果有一个输入流,则无需调用 SetNumberOfStreams 强制 EVR 使用混音器。

筛选器接口

EVR 筛选器会公开以下接口。 其中一些接口记录在 DirectShow SDK 中。 使用 QueryInterface 检索指向这些接口的指针:

输入引脚接口

EVR 筛选器上的输入引脚会公开以下接口。 使用 QueryInterface 检索指向这些接口的指针:

此外,可以使用 IMFGetService 接口检索以下接口:

DirectShow 中的音频/视频播放

增强的视频呈现器