Dela via


Använda källlösaren

Källupplösaren tar en URL eller byteström och skapar den lämpliga mediekällan för det innehållet. Om du vill skapa källlösaren anropar du MFCreateSourceResolver. Den här funktionen returnerar en IMFSourceResolver gränssnittspekare.

Källlösaren har både synkrona och asynkrona metoder. Om du använder källlösaren från huvudprogramtråden gör de asynkrona metoderna användargränssnittet mer dynamiskt. Synkrona metoder kan blockeras under en märkbar tid, särskilt om källlösaren måste öppna en nätverksresurs.

Synkrona metoder är:

De asynkrona metoderna är:

För asynkrona metoder har varje metod en motsvarande End... metod för att slutföra den asynkrona begäran och en Avbryt... metod för att avbryta en väntande begäran. Mer information om asynkrona metoder i Media Foundation finns i Asynkrona återanropsmetoder.

I följande kodexempel skapas en mediekälla från en URL. I det här exemplet används synkron metod.

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

Källupplösare