增强的视频呈现器

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

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

  • 适用于 Media Foundation 应用程序的 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 的一部分)。

显示 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 媒体接收器 如何在 Media Foundation 应用程序中使用 EVR。
使用视频显示控件 如何控制 EVR 在应用程序窗口中显示视频的方式。
使用视频混音器控件 如何控制 EVR 混音器运行的方式。
EVR 媒体类型协商 描述 EVR 如何确定它可以接受为输入的视频格式。
自定义混音器 如何为 EVR 编写自定义混音器。
如何编写 EVR 演示者 如何为 EVR 编写自定义演示者。

 

音频/视频播放