[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、IMFMediaEngine和媒體基金會中的音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 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 方法來完全建置擷取圖表。 不過,這會被視為進階主題,而且偏好使用擷取圖形產生器方法。 如需詳細資訊,請參閱 進階擷取主題。
相關主題