增强的视频呈现器

增强的视频呈现器 (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.)

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

 

音频/视频播放