다음을 통해 공유


VMR-9 필터 그래프 빌드

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

VMR-9(Video Mixing Renderer 9 필터)는 기본 비디오 렌더러가 아니므로 VMR-9를 사용하는 애플리케이션은 그래프에 명시적으로 추가하고 연결해야 합니다. 이 섹션에서는 VMR-9를 사용하여 필터 그래프를 빌드하는 두 가지 방법을 제공합니다.

캡처 그래프 작성기 사용

캡처 그래프 작성기는 사용자 지정 필터 그래프를 빌드하기 위한 도우미 개체입니다. 다음과 같이 VMR-9 그래프를 빌드하는 데 사용할 수 있습니다.

  1. 캡처 그래프 작성기 정보 항목에 설명된 대로 캡처 그래프 작성기를 만들고 초기화합니다.

  2. CoCreateInstance를 호출하여 VMR-9를 만듭니다.

    IBaseFilter *pVmr = NULL;
    hr = CoCreateInstance(CLSID_VideoMixingRenderer9, 0, 
        CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pVmr);
    
  3. 필터 그래프 관리자에서 IFilterGraph::AddFilter 를 호출하여 필터 그래프에 VMR-9를 추가합니다.

    hr = pGraph->AddFilter(pVmr, L"VMR9");
    
  4. IGraphBuilder::AddSourceFilter를 호출하여 비디오 파일에 대한 원본 필터를 추가합니다.

    IBaseFilter *pSource;
    hr = pGraph->AddSourceFilter(L"C:\\Example.avi", L"Source1", &pSource);
    
  5. ICaptureGraphBuilder2::RenderStream 메서드를 호출하여 비디오 스트림을 VMR로 렌더링합니다.

    hr = pBuild->RenderStream(0, 0, pSource, 0, pVmr);  
    
  6. 필요에 따라 RenderStream을 다시 호출하여 오디오 스트림을 렌더링합니다.

    hr = pBuild->RenderStream(0, &MEDIATYPE_Audio, pSource, 0, NULL);
    

각 원본 파일에 대해 AddSourceFilter 및 RenderStream을 호출하여 여러 비디오 스트림을 혼합할 수 있습니다.

필터 그래프 관리자 사용

캡처 그래프 작성기를 사용하지 않으려는 경우 다음과 같이 Filter Graph Manager에서 메서드를 사용하여 VMR-9 그래프를 빌드할 수 있습니다.

  1. 이전 절차와 같이 VMR-9를 만들고 그래프에 추가합니다.
  2. 이전 절차와 같이 AddSourceFilter를 사용하여 비디오 파일에 대한 원본 필터를 추가합니다.
  3. 오디오를 렌더링하려면 DirectSound 렌더러 필터의 instance 만들어 필터 그래프에 추가합니다.
  4. IBaseFilter::EnumPins 메서드를 사용하여 원본 필터에서 출력 핀을 찾습니다. 자세한 내용은 핀 열거를 참조하세요.
  5. IFilterGraph2 인터페이스에 대한 필터 그래프 관리자를 쿼리합니다.
  6. AM_RENDEREX_RENDERTOEXISTINGRENDERERS 플래그를 사용하여 IFilterGraph2::RenderEx 를 호출합니다. 이 호출은 그래프에 이미 있는 렌더러 필터(이 경우 VMR-9 및 DirectSound 렌더러)만 사용하여 출력 핀을 렌더링합니다. 이렇게 하면 Intelligent Connect 논리가 기본 비디오 렌더러를 그래프에 추가하지 못하게 되어 VMR-9가 연결되지 않은 상태로 남습니다.

캡처 그래프 작성기를 사용하여 그래프 빌드