CoCreateInstance를 사용하여 인코더 만들기

미디어 파일을 ASF 형식으로 변환하려면 Windows Media 인코더를 사용할 수 있습니다. 이러한 인코더를 사용하려면 시스템에 등록해야 합니다. 인코더는 MFT( Media Foundation 변환 )로 구현되며 IMFTransform 인터페이스를 노출해야 합니다. 이 항목에서는 애플리케이션이 필요한 MFT 인코더의 IMFTransform 인터페이스에 대한 포인터를 가져와서 사용하도록 인스턴스화하는 방법을 설명합니다.

인코더 등록에 대한 자세한 내용은 인코더 MFT 인스턴스화를 참조하세요.

인코더의 IMFTransform 인터페이스 사용

시스템에 Windows Media 인코더를 성공적으로 등록하면 애플리케이션이 MFTEnum을 호출하여 인코더를 열거할 수 있습니다. 올바른 인코더를 검색하려면 다음을 지정해야 합니다.

  • MFT_CATEGORY_AUDIO_ENCODER 또는MFT_CATEGORY_VIDEO_ENCODER 범주를 나타내는 GUID입니다.

  • 일치시킬 형식입니다. 인코더가 샘플을 생성할 미디어 형식의 주 형식 및 하위 형식을 지정하는 MFT_REGISTER_TYPE_INFO 구조체에서 설정됩니다. 이 구조체는 pOutputType 매개 변수에 전달됩니다. 지원되는 형식에 대한 자세한 내용은 미디어 형식 GUID를 참조하세요.

    참고

    pInputType 매개 변수의 입력 형식 정보는 필요하지 않습니다. 이는 입력 형식이 애플리케이션에 알려지고 인코더가 입력 스트림이 압축되지 않은 형식이어야 하기 때문입니다.

     

MFTEnum은 검색 조건과 일치하는 인코더 MFT에 대한 IMFTransform 포인터 배열을 반환합니다. COM 함수 CoCreateInstance 를 호출하고 사용하려는 인코더의 CLSID를 전달하여 인코더를 인스턴스화할 수 있습니다. 이 함수는 인코더를 나타내는 IMFTransform 인터페이스에 대한 포인터를 반환합니다. 이 함수 호출에 대한 자세한 내용은 COM(구성 요소 개체 모델)에 대한 Windows SDK 설명서를 참조하세요.

인코더 만들기 예제

다음 코드 예제에서는 오디오 또는 비디오 인코더를 만드는 방법을 보여 주세요.

HRESULT FindEncoder(
    const GUID& subtype, 
    BOOL bAudio, 
    IMFTransform **ppEncoder
    )
{
    HRESULT hr = S_OK;
    UINT32 count = 0;

    CLSID *ppCLSIDs = NULL;

    MFT_REGISTER_TYPE_INFO info = { 0 };

    info.guidMajorType = bAudio ? MFMediaType_Audio : MFMediaType_Video;
    info.guidSubtype = subtype;

    hr = MFTEnum(   
        bAudio ? MFT_CATEGORY_AUDIO_ENCODER : MFT_CATEGORY_VIDEO_ENCODER,
        0,          // Reserved
        NULL,       // Input type
        &info,      // Output type
        NULL,       // Reserved
        &ppCLSIDs,
        &count
        );

    if (SUCCEEDED(hr) && count == 0)
    {
        hr = MF_E_TOPO_CODEC_NOT_FOUND;
    }

    // Create the first encoder in the list.

    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(ppCLSIDs[0], NULL,
            CLSCTX_INPROC_SERVER, IID_PPV_ARGS(ppEncoder));
    }

    CoTaskMemFree(ppCLSIDs);
    return hr;
}

인코더 MFT 인스턴스화

Windows Media 인코더