VMR 窗口 (兼容性) 模式
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
VMR 旨在与所有现有的 DirectShow 应用程序兼容。 与现有应用程序一起使用时,VMR 在窗口模式下运行,具有单个视频流(也称为兼容模式)。 之所以提供此模式,是因为 VMR-7 是 Windows XP 上的默认呈现器,因此会自动用于调用 IGraphBuilder::RenderFile 等 Intelligent Connect 方法。 如果应用程序使用 Intelligent Connect 并且只需要基本呈现功能,则无需任何特殊代码即可使用 Windows XP 上的 VMR-7 正确呈现。
默认情况下,VMR-9 还会在窗口/兼容性模式下运行。 但是,VMR-9 绝不是默认视频呈现器。 若要在应用程序中使用 VMR-9,必须将其显式添加到筛选图。 因此,由于无窗口模式比窗口模式提供更好的功能,因此在窗口/兼容性模式下使用 VMR-9 没有特别的优势。
在窗口化/兼容模式下使用 VMR-7
无需特殊编程即可在窗口化/兼容性模式下设置或控制 VMR-7。 只需使用标准图形生成调用生成筛选器图,VMR-7 将默认为此模式。
在窗口/兼容性模式下,VMR-7 创建自己的窗口来显示视频。 为此,它将加载窗口管理器组件,该组件公开 IVideoWindow 和 IBasicVideo 接口。 应用程序可以查询筛选器图形管理器中的这些接口,就像使用旧视频呈现器筛选器一样。 有关详细信息,请参阅 使用窗口模式。
下图显示了处于窗口化/兼容性模式的 VMR-7。
为了保证最高级别的兼容性,视频窗口的类名与旧视频呈现器筛选器创建的类名相同,VMR 仍使用旧视频呈现器中的大多数窗口管理器代码。 在窗口化/兼容性模式下,VMR 消耗的系统资源不会超过旧的视频呈现器。 由于 VMR-7 在窗口/兼容性模式下只有一个输入流,因此它不会加载其混音器或合成器组件。
默认情况下,VMR 会拉伸图像以填充视频窗口。 若要保留源的纵横比,请使用 VMR_ARMODE_LETTER_BOX 标志调用 IVMRAspectRatioControl::SetAspectRatioMode 方法。
注意
将视频窗口放在子窗口中的 MFC 应用程序必须定义空WM_ERASEBKGND消息处理程序,否则视频显示区域将无法正确重新绘制。
将 VMR-7 在窗口化/兼容模式下与多个流配合使用
在窗口/兼容性模式下,VMR-7 默认创建单个输入引脚,并禁用混合模式。 若要启用混合模式,必须在连接 VMR 之前对其进行配置。 有关详细信息,请参阅 具有多个流的 VMR (混合模式) 。 在混合模式下,VMR 加载需要更多系统资源的混合和合成器组件。
在窗口模式下使用 VMR-9
由于 VMR-9 不是默认呈现器,因此它没有兼容性模式。 VMR-9 默认为具有四个输入引脚的窗口模式。 可以使用此模式混合最多四个视频流。 如果需要混合大量流,则必须按照 VMR 中的说明对其进行配置, 使用多个流 (混合模式) 。 否则,开窗模式下的 VMR-9 的行为与开窗/兼容模式下的 VMR-7 完全相同。