그래프 빌드 개요
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
필터 그래프를 만들려면 먼저 Filter Graph Manager의 instance 만듭니다.
IGraphBuilder* pIGB;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder,
(void **)&pIGB);
Filter Graph Manager는 다음과 같은 그래프 빌드 메서드를 지원합니다.
- IFilterGraph::ConnectDirect 는 두 핀 간에 직접 연결을 시도합니다. 핀을 연결할 수 없으면 메서드가 실패합니다.
- IGraphBuilder::Connect 는 두 개의 핀을 연결합니다. 가능하면 직접 연결합니다. 그렇지 않으면 중간 필터를 사용하여 연결을 완료합니다.
- IGraphBuilder::Render 는 출력 핀에서 시작하여 나머지 그래프를 빌드합니다. 이 메서드는 렌더러 필터에 도달할 때까지 필요에 따라 다운스트림으로 작업하는 필터를 추가합니다.
- IGraphBuilder::RenderFile 은 전체 파일 재생 그래프를 빌드합니다.
- IFilterGraph::AddFilter 는 그래프에 필터를 추가합니다. 필터를 연결하지 않습니다. CoCreateInstance를 호출하거나 필터 매퍼 또는 시스템 디바이스 열거자를 사용하여 이 메서드를 호출하기 전에 필터를 만들어야 합니다.
이러한 메서드는 그래프를 빌드하는 세 가지 기본 방법을 제공합니다.
- Filter Graph Manager는 전체 그래프를 빌드합니다.
- Filter Graph Manager는 그래프의 일부를 빌드합니다.
- 애플리케이션은 전체 그래프를 빌드합니다.
Filter Graph Manager는 전체 그래프를 빌드합니다.
AVI, MPEG, WAV 또는 MP3와 같이 인식된 형식으로 작성된 파일을 재생하려면 RenderFile 메서드를 사용합니다. 파일 재생 방법 문서에서는 이 작업을 수행하는 방법을 보여줍니다.
RenderFile 메서드는 레지스트리에서 파일을 구문 분석할 수 있는 원본 필터를 찾는 것으로 시작합니다. 프로토콜(예: URL의 " " https://
), 파일 확장명 또는 파일의 미리 정의된 바이트 패턴을 사용하여 원본 필터를 확인합니다. 자세한 내용은 사용자 지정 파일 형식 등록을 참조하세요.
나머지 그래프를 빌드하기 위해 Filter Graph Manager는 반복 프로세스를 사용합니다. 여기서 필터는 출력 핀에서 지원하는 미디어 형식을 사용하고 레지스트리에서 해당 미디어 형식을 입력으로 허용하는 필터를 검색합니다. 여러 조건을 사용하여 검색 범위를 좁히고 필터의 우선 순위를 지정합니다.
- 필터 범주는 필터의 일반적인 기능을 식별합니다.
- 미디어 형식은 필터가 입력으로 수락하거나 출력으로 제공할 수 있는 데이터의 종류를 설명합니다.
- 장점은 필터가 시도되는 순서를 결정합니다. 동일한 필터 범주의 두 필터가 모두 동일한 입력 형식을 지원하는 경우 필터 그래프 관리자는 장점 값이 가장 높은 필터를 선택합니다. 일부 필터는 특수한 용도로 설계되었으며 애플리케이션에서 그래프에만 추가해야 하므로 의도적으로 낮은 장점 값을 부여받습니다.
Filter Graph Manager는 Filter Mapper 개체를 사용하여 레지스트리를 검색합니다.
각 필터가 추가되면 Filter Graph Manager가 이전 필터의 출력 핀에 연결하려고 시도합니다. 필터는 연결할 수 있는지 여부와 연결에 사용할 미디어 형식을 결정하기 위해 협상합니다. 새 필터를 연결할 수 없는 경우 Filter Graph Manager는 필터를 삭제하고 다른 필터를 시도합니다. 이 프로세스는 모든 스트림이 렌더링될 때까지 계속됩니다.
필터 그래프 관리자가 그래프의 일부를 빌드합니다.
단순히 파일을 재생하는 것 이상의 작업을 수행하려면 애플리케이션이 적어도 일부 그래프 빌드 작업을 수행해야 합니다. 예를 들어 비디오 캡처 애플리케이션은 캡처 원본 필터를 선택하고 그래프에 추가해야 합니다. AVI 파일에 데이터를 쓰는 경우 그래프에 AVI Mux 및 파일 기록기 필터를 추가해야 합니다. 그러나 필터 그래프 관리자가 그래프를 완료하도록 할 수 있는 경우가 많습니다. 예를 들어 Render 메서드를 호출하여 미리 보기용 핀을 렌더링할 수 있습니다.
애플리케이션이 전체 그래프를 빌드합니다.
일부 시나리오에서는 애플리케이션이 각 필터를 추가하고 연결하여 그래프를 빌드해야 할 수 있습니다. 이 경우 그래프에 추가해야 하는 필터를 구체적으로 알고 있을 것입니다. 이 방법을 사용하면 애플리케이션은 AddFilter를 호출하여 각 필터를 추가하고, 필터의 핀을 열거하고, Connect 또는 ConnectDirect를 호출하여 연결합니다.
관련 항목