DES에서 Windows 미디어 파일 작성
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
[이 API는 지원되지 않으며 나중에 변경되거나 사용할 수 없습니다.]
이 섹션에서는 DES( DirectShow Editing Services )를 사용하여 Windows Media 파일을 작성하는 방법을 설명합니다.
중요
스마트 렌더링 엔진을 사용하여 Windows Media 파일을 작성하지 마세요. 항상 기본 렌더링 엔진(CLSID_RenderEngine)을 사용합니다.
Windows Media 파일을 작성하려면 다음을 수행합니다.
렌더링 엔진에서 키 공급자에 대한 포인터를 사용하여 SetSite 를 호출합니다.
그래프의 프런트 엔드를 빌드합니다. ( 프로젝트 렌더링을 참조하세요.)
WM ASF 기록기 필터를 만들고 그래프에 추가합니다.
WM ASF 기록기 필터에서 IFileSinkFilter 인터페이스를 사용하여 파일 이름을 설정합니다.
Windows Media 프로필을 사용하도록 WM ASF 기록기를 구성합니다. 각 프로필에는 미리 정의된 개수의 스트림이 있습니다. 프로젝트의 그룹과 일치하는 프로필을 선택해야 합니다.
IConfigAsfWriter 인터페이스에는 프로필을 설정하는 몇 가지 다른 메서드가 포함되어 있습니다. 예를 들어 ConfigureFilterUsingProfileGuid 메서드는 시스템 프로필을 GUID로 지정합니다. 또는 Windows Media Format 메서드를 사용하여 IWMProfile 포인터를 가져와 서 IConfigAsfWriter::ConfigureFilterUsingProfile을 호출할 수 있습니다. 자세한 내용은 ASF 기록기 구성을 참조하세요.
프런트 엔드를 ASF 기록기에 연결합니다. 그래프의 프런트 엔드에는 각 그룹에 대해 하나의 출력 핀이 포함됩니다. 호환되는 프로필을 지정했다고 가정하면 ASF 기록기에 일치하는 입력 핀 집합이 있어야 합니다. 각 출력 핀을 해당 입력 핀에 연결합니다. 이 작업을 수행하는 가장 쉬운 방법은 ICaptureGraphBuilder2::RenderStream 메서드를 사용하는 것입니다. 먼저 캡처 그래프 작성기의 새 instance 만들고 Filter Graph Manager에 대한 포인터를 사용하여 초기화합니다.
ICaptureGraphBuilder2 *pBuild = 0; hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, 0, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuild); pBuild->SetFiltergraph(pGraph);
다음으로, IRenderEngine::GetGroupOutputPin 메서드를 호출하여 각 그룹에 대한 출력 핀을 검색합니다. RenderStream을 호출하여 핀을 ASF 기록기에 연결합니다.
long cGroups = 0; hr = pTimeline->GetGroupCount(&cGroups); for (long i = 0; i < cGroups; i++) { IPin *pPin; hr = pRenderEngine->GetGroupOutputPin(i, &pPin); if (SUCCEEDED(hr)) { hr = pBuild->RenderStream(0, 0, pPin, 0, pASF); } pPin->Release(); } pBuild->Release
관련 항목