關於擷取圖形產生器
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
執行視訊或音訊擷取的篩選圖表稱為擷 取圖形。 擷取圖形通常比檔案播放圖表更複雜。 為了方便應用程式建置擷取圖形,DirectShow 提供稱為 Capture Graph Builder 的協助程式物件。 擷取圖形產生器會公開 ICaptureGraphBuilder2 介面,其中包含建置和控制擷取圖形的方法。 下圖說明 Capture Graph Builder 和 ICaptureGraphBuilder2 介面。
首先,呼叫 CoCreateInstance 以建立擷取圖形產生器和篩選圖形管理員的新實例。 然後呼叫 ICaptureGraphBuilder2::SetFiltergraph ,並使用篩選圖形管理員 IGraphBuilder 介面的指標來初始化擷取圖形產生器。 下圖說明此程序。
下列程式碼顯示協助程式函式來執行下列步驟:
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 方法來完全建置擷取圖形。 不過,這被視為進階主題,而擷取圖形產生器方法則優先使用。 如需詳細資訊,請參閱 進階擷取主題。
相關主題