增强的视频呈现器

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

增强的视频呈现器 (EVR) 是用于在用户监视器上显示视频的组件。 有两个版本的 EVR:

  • 适用于媒体基础应用程序的 EVR 媒体接收器。
  • 用于 DirectShow 应用程序的 EVR 筛选器。

这两个版本都使用相同的内部对象来呈现视频,并且它们共用许多相同的接口。

EVR 最多可以混合 16 个视频流。 第一个输入流称为参考流。 参考流始终在采用 z 顺序时显示在第一位。 任何其他流都称为子流,并在参考流顶部混合。 应用程序可以更改子流的 z 顺序,但在采用 z 顺序时,无法在第一位显示任何子流。

图形驱动程序可确定支持哪些视频格式,但通常限制为以下格式:

  • 参考流:无每像素 alpha 的渐进式或交错式 YUV(如 NV12 或 YUY2);或渐进式 RGB。
  • 子流:有每像素 alpha 的渐进式 YUV,例如 AYUV 或 AI44。

可用的子流格式可能取决于参考流的格式。 有关详细信息,请参阅 EVR 媒体类型协商

在内部,EVR 使用一个名为混合器的对象将输入流中的帧组合到一个图面上进行呈现。 混合器还执行反交错和颜色更正。 混合器的输出是最终的复合视频帧。 另一个名为演示器的对象将视频帧呈现到显示器。 演示器可安排呈现帧的时间并管理 Direct3D 设备。 应用程序可以提供混合器或演示器的自定义实现。

输出帧速率锁定到参考流。 每当子流接收到新帧时,混合器都会保留它们。 当参考流接收到新帧时,混合器会将该帧与子流帧组合在一起。 (对于交错式参考流,完整的参考帧可能需要多个媒体样本。)当混合器等待参考帧时,子流可以接收多个帧。 在这种情况下,混合器只是丢弃先前的子流帧。

由于演示器创建了 Direct3D 设备,因此它还负责与需要访问 DirectX 视频加速 (DXVA) 服务的其他管道对象共享该设备。 具体而言,EVR 混合器使用 DXVA 视频处理服务来反交错并混合视频。 在 EVR 外部,软件解码器可以使用 DXVA 来加速视频解码。 演示器通过 Direct3D 设备管理器共享 Direct3D 设备。 下图显示了 EVR 的内部体系结构。 (显示为灰色的软件解码器不是 EVR 的一部分)。

architectural diagram showing the evr.

EVR 接口

EVR 支持以下接口。 其中一些接口由混合器或演示器实现。 对于每个接口,参考主题介绍了如何获取指向接口的指针。

接口 说明
IEVRFilterConfig 设置 EVR 筛选器上的输入引脚数(仅 DirectShow)。
IEVRFilterConfigEx 配置 EVR 筛选器(仅 DirectShow)。
IEVRTrustedVideoPlugin 使 EVR 插件能够呈现受保护的视频。
IMFDesiredSample 使 EVR 演示器能够从混合器请求特定帧。
IMFQualityAdvise 使质量管理器能够调整 EVR 视频质量。
IMFTopologyServiceLookup 使自定义混合器或演示器能够从 EVR 获取接口指针。
IMFVideoDeviceID 返回 EVR 混合器或演示器的设备标识符。
IMFVideoDisplayControl 控制 EVR 显示视频的方式。
IMFVideoMixerBitmap 将静态位图图像通过 Alpha 值混合处理与视频混合。
IMFVideoMixerControl 控制增强的视频呈现器 (EVR) 混合视频子流的方式。
IMFVideoMixerControl2 控制视频反交错的首选项。
IMFVideoPositionMapper 将输入视频流上的位置映射到输出视频流上的相应位置。
IMFVideoPresenter 由 EVR 演示公器开。
IMFVideoProcessor 控制视频处理,包括调整、噪音过滤和细节过滤。
IMFVideoRenderer 在 EVR 上设置混合器或演示器。
IMFVideoSampleAllocator 分配视频样本。

 

本节内容

主题 说明
使用 DirectShow EVR 筛选器 如何在 DirectShow 应用程序中使用 EVR。
使用 EVR 媒体接收器 如何在媒体基础应用程序中使用 EVR。
使用视频显示控件 如何控制 EVR 在应用程序窗口中显示视频的方式。
使用视频混合器控件 如何控制 EVR 混合器的运行方式。
EVR 媒体类型协商 描述 EVR 如何确定它可以接受哪些视频格式作为输入。
自定义混合器 如何为 EVR 编写自定义混合器。
如何编写 EVR 演示器 如何为 EVR 编写自定义演示器。

 

音频/视频播放