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

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

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

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