다음을 통해 공유


프로젝트 미리 보기

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

[이 API는 지원되지 않으며 나중에 변경되거나 사용할 수 없습니다.]

프로젝트를 미리 보려면 먼저 CoCreateInstance를 호출하여 기본 렌더링 엔진의 instance 만듭니다. 클래스 식별자가 CLSID_RenderEngine. 그런 다음, IRenderEngine::SetTimelineObject 메서드를 호출하여 렌더링할 타임라인 지정합니다.

타임라인 처음으로 미리 볼 때 나열된 순서대로 다음 호출을 수행합니다.

  1. IRenderEngine::SetRenderRange를 호출하여 미리 볼 타임라인 부분을 지정합니다. (선택 사항)
  2. IRenderEngine::ConnectFrontEnd를 호출하여 그래프의 프런트 엔드를 작성합니다.
  3. IRenderEngine::RenderOutputPins를 호출합니다. 이 메서드는 각 출력 핀을 비디오 렌더러 또는 오디오 렌더러에 연결하여 그래프를 완료합니다.

다음 코드 예제에서는 다음 단계를 보여줍니다.

IRenderEngine *pRender = NULL; 
hr = CoCreateInstance(CLSID_RenderEngine, NULL, 
    CLSCTX_INPROC_SERVER, IID_IRenderEngine, (void**)&pRender);

hr = pRender->SetTimelineObject(pTL);
hr = pRender->ConnectFrontEnd();
hr = pRender->RenderOutputPins();

이제 필터 그래프를 실행합니다. 먼저 IRenderEngine::GetFilterGraph 메서드를 호출하여 Filter Graph Manager의 IGraphBuilder 인터페이스에 대한 포인터를 검색합니다. 그런 다음, IMediaControl 인터페이스에 대한 필터 그래프 관리자를 쿼리하고 다음 코드와 같이 IMediaControl::Run을 호출합니다.

IGraphBuilder   *pGraph = NULL;
IMediaControl   *pControl = NULL;
hr = pRender->GetFilterGraph(&pGraph);
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pControl->Run();

필터 그래프 관리자의 IMediaEventEx 인터페이스를 사용하여 미리 보기가 완료되기를 기다립니다. 파일 재생 그래프와 마찬가지로 Filter Graph Manager의 IMediaSeeking 인터페이스를 사용하여 그래프를 검색할 수도 있습니다.

프로젝트를 다시 미리 보려면 그래프를 0으로 다시 찾고 실행을 다시 호출합니다. 타임라인 내용을 변경하는 경우 다음을 수행합니다.

  1. SetRenderRange를 호출합니다. (선택 사항)
  2. ConnectFrontEnd를 호출합니다.
  3. ConnectFrontEnd 메서드가 S_WARN_OUTPUTRESET 반환하는 경우 RenderOutputPins를 호출합니다. ConnectFrontEnd가 S_OK 반환하는 경우 이 단계를 건너뛸 수 있습니다.
  4. 그래프를 시간 0으로 다시 찾습니다.
  5. 그래프를 실행합니다.

다음 예제에서는 다음 단계를 보여줍니다.

hr = pRender->ConnectFrontEnd();
if (hr == S_WARN_OUTPUTRESET)
{
    hr = pRender->RenderOutputPins();
}
LONGLONG llStart = 0; 
hr = pSeek->SetPositions(&llStart, AM_SEEKING_AbsolutePositioning, 0, 0); 
hr = pControl->Run();

프로젝트 파일을 로드하고 미리 보는 전체 예제는 프로젝트 로드 및 미리 보기를 참조하세요.

비디오 편집 프로젝트 관리

프로젝트 렌더링