关于捕获图形生成器
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
执行视频或音频捕获的筛选器 图称为捕获图。 捕获图通常比文件播放图更复杂。 为了便于应用程序生成捕获图,DirectShow 提供了一个名为 Capture Graph Builder 的帮助程序对象。 捕获图形生成器公开 ICaptureGraphBuilder2 接口,其中包含用于生成和控制捕获图的方法。 下图演示了捕获图形生成器和 ICaptureGraphBuilder2 接口。
首先,调用 CoCreateInstance 以创建捕获图形生成器和 Filter Graph 管理器的新实例。 然后,使用指向 Filter Graph Manager 的 IGraphBuilder 接口的指针调用 ICaptureGraphBuilder2::SetFiltergraph 来初始化捕获图形 生成器 。 下图演示了此过程。
以下代码演示执行以下步骤的帮助程序函数:
HRESULT InitCaptureGraphBuilder(
IGraphBuilder **ppGraph, // Receives the pointer.
ICaptureGraphBuilder2 **ppBuild // Receives the pointer.
)
{
if (!ppGraph || !ppBuild)
{
return E_POINTER;
}
IGraphBuilder *pGraph = NULL;
ICaptureGraphBuilder2 *pBuild = NULL;
// Create the Capture Graph Builder.
HRESULT hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL,
CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuild );
if (SUCCEEDED(hr))
{
// Create the Filter Graph Manager.
hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void**)&pGraph);
if (SUCCEEDED(hr))
{
// Initialize the Capture Graph Builder.
pBuild->SetFiltergraph(pGraph);
// Return both interface pointers to the caller.
*ppBuild = pBuild;
*ppGraph = pGraph; // The caller must release both interfaces.
return S_OK;
}
else
{
pBuild->Release();
}
}
return hr; // Failed
}
在有关视频捕获的本部分中,假定你使用的是捕获图形生成器来创建捕获图。 但是,可以使用 IGraphBuilder 方法完全生成捕获图。 但是,这被认为是一个高级主题,捕获图形生成器方法是首选方法。 有关详细信息,请参阅 高级捕获主题。
相关主题