캡처 그래프 작성기 정보
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
비디오 또는 오디오 캡처를 수행하는 필터 그래프를 캡처 그래프라고 합니다. 캡처 그래프는 파일 재생 그래프보다 더 복잡한 경우가 많습니다. 애플리케이션이 캡처 그래프를 쉽게 빌드할 수 있도록 DirectShow는 캡처 그래프 작성기라는 도우미 개체를 제공합니다. 캡처 그래프 작성기는 캡처 그래프를 빌드하고 제어하는 메서드를 포함하는 ICaptureGraphBuilder2 인터페이스를 노출합니다. 다음 다이어그램에서는 캡처 그래프 작성기 및 ICaptureGraphBuilder2 인터페이스를 보여 줍니다.
먼저 CoCreateInstance를 호출하여 캡처 그래프 작성기 및 필터 그래프 관리자의 새 인스턴스를 만듭니다. 그런 다음 필터 그래프 관리자의 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 메서드를 사용하여 캡처 그래프를 완전히 빌드할 수 있습니다. 그러나 고급 항목으로 간주되며 캡처 그래프 작성기 메서드가 선호됩니다. 자세한 내용은 고급 캡처 항목을 참조하세요.
관련 항목