Verwenden des Quelllösers

Der Source Resolver nimmt einen URL oder Bytedatenstrom und erstellt die entsprechende Medienquelle für den Inhalt. Um den Quelllöser zu erstellen, rufen Sie MFCreateSourceResolver auf. Diese Funktion gibt einen IMFSourceResolver-Schnittstellenzeiger zurück.

Der Quelllöser verfügt über synchrone und asynchrone Methoden. Wenn Sie den Quellrelöser ihres Standard Anwendungsthreads verwenden, werden ihre Benutzeroberfläche durch die asynchronen Methoden reaktionsfähiger. Die synchronen Methoden können für eine spürbare Zeit blockiert werden, insbesondere wenn der Quelllöser eine Netzwerkressource öffnen muss.

Die synchronen Methoden sind:

Die asynchronen Methoden sind:

Für die asynchronen Methoden verfügt jede Methode über eine entsprechende End...- Methode zum Abschließen der asynchronen Anforderung und über eine Cancel... -Methode zum Abbrechen einer ausstehenden Anforderung. Weitere Informationen zu asynchronen Methoden in Media Foundation finden Sie unter Asynchrone Rückrufmethoden.

Im folgenden Codebeispiel wird eine Medienquelle aus einer URL erstellt. In diesem Beispiel wird die synchrone Methode verwendet.

//  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;
}

Quelllöser