[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, 그리고 Media Foundation 의 오디오/비디오 캡처으로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngine 및 Audio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
[이 API는 지원되지 않으며 나중에 변경되거나 사용할 수 없습니다.]
프로젝트를 미리 보려면 먼저 CoCreateInstance 호출하여 기본 렌더링 엔진의 인스턴스를 만듭니다. 클래스 식별자는 CLSID_RenderEngine입니다. 그런 다음 IRenderEngine::SetTimelineObject 메서드를 호출하여 렌더링하는 타임라인을 지정합니다.
타임라인을 처음 미리 볼 때 나열된 순서대로 다음 호출을 수행합니다.
- IRenderEngine::SetRenderRange 호출하여 미리 볼 타임라인의 일부를 지정합니다. (선택 사항)
- IRenderEngine::ConnectFrontEnd 호출하여 그래프의 프런트 엔드를 빌드합니다.
- 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 인터페이스를 사용하여 미리 보기가 완료되기를 기다립니다. 파일 재생 그래프와 마찬가지로 필터 그래프 관리자의 IMediaSeeking 인터페이스를 사용하여 그래프를 검색할 수도 있습니다.
프로젝트를 다시 보려면 그래프를 시간 0으로 되돌리고, 실행을 다시 실행하세요. 타임라인의 내용을 변경하는 경우 다음을 수행합니다.
- 을(를) 호출하여 SetRenderRange을(를) 설정합니다. (선택 사항)
- 을 호출하여 ConnectFrontEnd을 실행합니다.
- ConnectFrontEnd 메서드가 S_WARN_OUTPUTRESET 반환하는 경우 RenderOutputPins호출합니다. (ConnectFrontEnd S_OK 반환하는 경우 이 단계를 건너뛸 수 있습니다.
- 그래프를 0 시점으로 되돌립니다.
- 그래프를 실행합니다.
다음 예제에서는 다음 단계를 보여줍니다.
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();
프로젝트 파일을 로드하고 미리 보는 전체 예제는 프로젝트 로드 및 미리 보기참조하세요.
관련 항목