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

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

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

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

例如,假设对应于引脚 0 的流 0 () 包含main视频流,而对应于引脚 1 的流 1 () 包含辅助视频。 流 1 可以通过指定规范化矩形 { -1.0f, 0.0f, 0.0f, 1.0f } 完全定位到屏幕外。 然后,可以通过在连续调用 SetOutputRect 时修改矩形的左右两侧,将流 1 移动到可见区域:

Label
时间 Rectangle
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 混合模式