원본 확인자 사용

원본 확인자는 URL 또는 바이트 스트림을 사용하고 해당 콘텐츠에 적합한 미디어 원본을 만듭니다. 원본 확인자를 만들려면 MFCreateSourceResolver를 호출합니다. 이 함수는 IMFSourceResolver 인터페이스 포인터를 반환합니다.

원본 확인자는 동기 메서드와 비동기 메서드를 모두 사용합니다. 기본 애플리케이션 스레드에서 원본 확인자를 사용하는 경우 비동기 메서드를 사용하면 사용자 인터페이스의 응답성이 높아집니다. 동기 메서드는 특히 원본 확인자에서 네트워크 리소스를 열어야 하는 경우 눈에 띄는 시간 동안 차단할 수 있습니다.

동기 메서드는 다음과 같습니다.

비동기 메서드는 다음과 같습니다.

비동기 메서드의 경우 각 메서드에는 비동기 요청을 완료하는 해당 End... 메서드와 보류 중인 요청을 취소하는 Cancel... 메서드가 있습니다. Media Foundation의 비동기 메서드에 대한 자세한 내용은 비동기 콜백 메서드를 참조하세요.

다음 코드 예제에서는 URL에서 미디어 원본을 만듭니다. 이 예제에서는 동기 메서드를 사용합니다.

//  Create a media source from a URL.
HRESULT CreateMediaSource(PCWSTR sURL, IMFMediaSource **ppSource)
{
    MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID;

    IMFSourceResolver* pSourceResolver = NULL;
    IUnknown* pSource = NULL;

    // Create the source resolver.
    HRESULT hr = MFCreateSourceResolver(&pSourceResolver);
    if (FAILED(hr))
    {
        goto done;
    }

    // Use the source resolver to create the media source.

    // Note: For simplicity this sample uses the synchronous method to create 
    // the media source. However, creating a media source can take a noticeable
    // amount of time, especially for a network source. For a more responsive 
    // UI, use the asynchronous BeginCreateObjectFromURL method.

    hr = pSourceResolver->CreateObjectFromURL(
        sURL,                       // URL of the source.
        MF_RESOLUTION_MEDIASOURCE,  // Create a source object.
        NULL,                       // Optional property store.
        &ObjectType,        // Receives the created object type. 
        &pSource            // Receives a pointer to the media source.
        );
    if (FAILED(hr))
    {
        goto done;
    }

    // Get the IMFMediaSource interface from the media source.
    hr = pSource->QueryInterface(IID_PPV_ARGS(ppSource));

done:
    SafeRelease(&pSourceResolver);
    SafeRelease(&pSource);
    return hr;
}

원본 확인자