다음을 통해 공유


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 파일을 작성하려면 다음을 수행합니다.

  1. 렌더링 엔진에서 키 공급자에 대한 포인터를 사용하여 SetSite 를 호출합니다.

  2. 그래프의 프런트 엔드를 빌드합니다. ( 프로젝트 렌더링을 참조하세요.)

  3. WM ASF 기록기 필터를 만들고 그래프에 추가합니다.

  4. WM ASF 기록기 필터에서 IFileSinkFilter 인터페이스를 사용하여 파일 이름을 설정합니다.

  5. Windows Media 프로필을 사용하도록 WM ASF 기록기를 구성합니다. 각 프로필에는 미리 정의된 개수의 스트림이 있습니다. 프로젝트의 그룹과 일치하는 프로필을 선택해야 합니다.

    IConfigAsfWriter 인터페이스에는 프로필을 설정하는 몇 가지 다른 메서드가 포함되어 있습니다. 예를 들어 ConfigureFilterUsingProfileGuid 메서드는 시스템 프로필을 GUID로 지정합니다. 또는 Windows Media Format 메서드를 사용하여 IWMProfile 포인터를 가져와 서 IConfigAsfWriter::ConfigureFilterUsingProfile을 호출할 수 있습니다. 자세한 내용은 ASF 기록기 구성을 참조하세요.

  6. 프런트 엔드를 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
    

DirectShow Editing Services에서 Windows Media 사용