视频端口引脚

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

具有硬件视频端口的捕获设备可能会在 Microsoft® DirectX® 中使用视频端口扩展(VPE)。 如果是这样,捕获筛选器将具有视频端口(VP)引脚。 没有视频数据通过筛选器图从 VP 引脚传输。 而是在硬件中生成视频帧,并直接发送到视频内存。 VP 引脚允许将控制消息发送到硬件。

连接 VP 引脚非常重要,即使应用程序仅执行文件捕获且没有预览。 如果保持未连接固定的固定,则图形将无法正确运行。 这不同于不需要连接的预览引脚。

不同的 DirectShow 视频呈现器为 VP 引脚提供不同的支持:

  • 视频呈现器:将 VP 引脚连接到 覆盖混音器 筛选器上的 pin 0,并将覆盖混音器筛选器连接到视频呈现器。
  • VMR-7:将 VP 引脚连接到 视频端口管理器 筛选器,并将视频端口管理器连接到 VMR-7。
  • VMR-9:如果设备具有 VP 引脚,则无法使用 VMR-9,因为 Direct3D 9 不支持视频端口。 使用视频呈现器或 VMR-7。

对于视频端口方案,建议通过视频端口管理器和 VMR-7 使用覆盖混音器和视频呈现器,因为并非所有驱动程序都支持视频端口管理器。 通常,覆盖混音器是视频端口最可靠的选项。

如果存在 VP 引脚,则 ICaptureGraphBuilder2::RenderStream 方法会自动插入覆盖混音器。 如果在不使用此方法的情况下生成图形,则应检查捕获筛选器上的视频端口引脚,如果存在,请将其连接到覆盖混音器筛选器,如下图所示。

将视频端口引脚连接到覆盖混音器筛选器。

可以使用 ICaptureGraphBuilder2::FindPin 方法在捕获筛选器上搜索 VP 引脚:

hr = pBuild->FindPin(
    pCap,                    // Pointer to the capture filter.
    PINDIR_OUTPUT,           // Look for an output pin.
    &PIN_CATEGORY_VIDEOPORT, // Look for a video port pin.
    NULL,                    // Any media type.
    FALSE,                   // Pin can be connected.
    0,                       // Retrieve the first matching pin.
    &pVPPin                  // Receives a pointer to the pin.
);

将覆盖混音器添加到图形后,再次调用 FindPin 以在覆盖混音器上查找引脚 0。 引脚 0 始终是筛选器上的第一个输入引脚。

pBuild->FindPin(pOvMix, PINDIR_INPUT, NULL, NULL, TRUE, 0, &pOVPin);

通过调用 IGraphBuilder::Connect来连接两个引脚。

pGraph->Connect(pVPPin, pOvPin);

然后将覆盖混音器的输出引脚连接到视频呈现器筛选器。 可以通过在 Filter Graph 管理器上调用 IVideoWindow::p ut_AutoShowIVideoWindow::p ut_Visible 方法隐藏视频。

对于电视优化器,捕获筛选器也可能具有视频端口 VBI 引脚(PIN_CATEGORY_VIDEOPORT_VBI)。 如果是,请将该引脚连接到 VBI Surface 分配器 筛选器。 有关详细信息,请参阅 查看隐藏式字幕

高级捕获主题

在视频捕获 中使用覆盖混音器