VMR 与以前的 DirectShow 呈现器

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

使用旧筛选器时,关系图中需要不同的呈现器,具体取决于硬件配置。

视频呈现器筛选器用于在非视频端口方案中呈现单个视频流。 它基于图形硬件技术(现已超过五年),以及较旧版本的 DirectDraw。 在某些情况下,它使用 GDI 进行呈现。 这样做要么是为了节省五年前限制得多的视频资源,要么是为了克服 DirectDraw 中与多监视器支持相关的限制。 VMR-7 和 VMR-9 从未使用 GDI 进行呈现;VMR-7 完全基于 DirectDraw 7,VMR-9 基于 Direct3D 9。

在涉及一个视频端口或多个视频输入流的场景中,在 VMR 之前, 覆盖混合器 筛选器用于呈现。 此筛选器仅使用图形卡上的硬件覆盖,因此通常仅限于大多数卡提供的一个覆盖图面。 覆盖混合器执行目标颜色键控,但它不能进行 alpha 混合。 由于它没有窗口管理器,因此它必须使用第二个筛选器(视频呈现器)进行窗口管理。 VMR 能够进行真正的 alpha 混合,除了硬件覆盖外,还可以在软件中创建多个覆盖层。

在应用程序在视频上覆盖隐藏字幕或其他 VBI 数据的视频端口方案中,需要额外的筛选器 VBI Surface 分配器,以便为 VBI 文本分配额外的视频内存。 对于 ISV,VMR-7 通过将分配和呈现功能组合到用于所有方案的单个筛选器中来简化应用程序开发。 使用 VMR 时,不再需要 VBI Surface 分配器。 此筛选器在 Windows XP 中被新的 视频端口管理器 筛选器替换,该筛选器执行之前由覆盖混合器执行的所有视频端口任务。

注意

VMR-9 不支持视频端口。

 

VMR 比早期呈现器更可靠,部分原因在于,如果使用 VMR-9) 接口,则仅使用 DirectDraw 7 (或 Direct3D 9,而旧呈现器则使用旧版呈现器,后者混合使用旧版和较新版本 DirectDraw 的接口。 VMR 还采用新的图像呈现机制,该机制专为当前和未来几代适配器而设计,这些适配器支持 Direct3D、增加的 VRAM 和视频内存带宽以及硬件加速功能。 使用 VMR 时,重点在于前端处理,减少对视频端口和覆盖的依赖。 但即使具有所有新功能,VMR 的设计也旨在最大程度地与现有应用程序兼容。

VMR 也是可扩展的。 应用程序可以提供自己的子组件来执行自定义视频效果和/或控制分配和呈现过程。

关于视频混合呈现器