在合成空间中定位和移动视频矩形

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

当 VMR 混合多个输入流时,它将每个流定位在一个名为“合成空间”的规范化矩形中。在合成空间中,坐标 (0.0, 0.0) 到 (1.0, 1.0) 构成可见的视频矩形。 此矩形外部的任何坐标都剪裁。

应用程序可以通过更改该流的合成空间中的目标矩形,通过移动、拉伸和缩小输入流中的视频来执行特殊效果。 如果指定的矩形的大小与本机视频矩形不同,则本机视频将被收缩或拉伸以适应。 目标矩形是通过调用 IVMRMixerControl::SetOutputRect 方法指定的。

例如,假设流 0(对应于 pin 0)包含主视频流,流 1(对应于 pin 1)包含辅助视频。 可以通过指定 { -1.0f、0.0f、0.0f、0.0f、1.0f } 的规范化矩形来完全关闭屏幕。 然后,可以通过在连续调用 setOutputRect 时修改矩形的左侧和右侧,将流 1 移动到可见区域:

标签 价值
时间 矩形
t + 0 { -1.0f、0.0f、0.0f、1.0f }
t + 1 { -0.9f、0.0f、0.1f、1.0f }
t + 2 { -0.8f、0.0f、0.2f、1.0f }
... ...
t + 10 { 0.0f、0.0f、1.0f、1.0f }

 

在合成空间中移动视频流

t+10 时,来自流 1 的视频完全可见。 在此示例中,流 1 的本机大小在移动时保持。 还可以拉伸或收缩矩形以产生有趣的效果。 还可以通过为顶部指定大于底部的值或水平镜像视频,从而垂直翻转视频,方法是为左侧的值指定大于右侧的值。

使用 VMR 混合模式