具有多个流的 VMR (混合模式)

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

VMR 可以呈现多个输入流。 在此称为混合模式的配置中,VMR 加载其混音器和合成器,以在呈现之前执行混合和混合。 当 VMR 处于窗口模式或无窗口模式时,可以使用混合模式。

混合模式要求图形驱动程序支持DDCAPS_BLTFOURCC和DDCAPS_BLTSTRETCH功能标志, (颜色空间转换和拉伸分条,分别) 。 几乎所有新的图形驱动程序都具有这些功能。 此外,驱动程序必须支持为当前显示像素深度创建 Direct3D 呈现目标。 当显示器设置为每像素 24 位时,某些设备不支持 Direct3D 操作。 有关详细信息,请参阅 DirectX 图形 SDK 文档。

注意

当 VMR 混合多个视频流时,筛选器图无法正确查找。 如果需要查找多个视频流,则必须创建共享同一自定义分配器-演示者对象的单独筛选器图。

 

为多个流配置 VMR-7

若要使用 VMR-7 呈现多个输入流,请执行以下操作:

  1. 在连接 VMR 的任何输入引脚之前,请使用流数调用 IVMRFilterConfig::SetNumberOfStreams 方法。 这会导致 VMR 加载混音器和合成器并创建指定数量的输入引脚。
  2. 调用 IVMRFilterConfig::SetRenderingPrefs 以指定各种呈现首选项。
  3. 将引脚连接到上游筛选器。 执行此操作的最简单方法是为每个输入流调用 IGraphBuilder::RenderFile 。 如果上游筛选器上的输出引脚通常 (解码器) 并且 VMR 上的输入引脚无法就连接达成一致,则将创建具有默认设置的 VMR 的新实例。 这将导致在标题栏中显示“ActiveMovie”的新窗口。 若要防止这种情况发生,应用程序应始终通过调用 IPin::ConnectedTo 等方法验证是否使用了正确的 VMR 实例。 另一个选项是添加源筛选器,然后使用 IGraphBuilder::Connect 连接引脚。
  4. 使用 VMR 上的 IVMRMixerControl 接口控制每个流的参数,例如 alpha 值、Z 排序和输出矩形。
  5. 运行筛选器图。

为多个流配置 VMR-9

默认情况下,VMR-9 会创建四个输入引脚。 如果要混合四个以上的视频流,请在连接任何输入引脚之前调用 IVMRFilterConfig9::SetNumberOfStreams 。 使用 IVMRMixerControl9 接口设置流参数,例如 alpha、Z 顺序和位置。

使用 VMR 混合模式