Megosztás a következőn keresztül:


A Forrásfeloldó használata

A forrásfeloldó egy URL-címet vagy bájtfolyamot használ, és létrehozza a megfelelő médiaforrást a tartalomhoz. A forrásfeloldó létrehozásához hívja meg MFCreateSourceResolver. Ez a függvény egy IMFSourceResolver interfészmutatót ad vissza.

A forrásfeloldó szinkron és aszinkron metódusokkal is rendelkezik. Ha a fő alkalmazásszálból használja a forrásfeloldót, az aszinkron metódusok rugalmasabbá teszik a felhasználói felületet. A szinkron metódusok jelentős ideig blokkolhatnak, különösen akkor, ha a forrásfeloldónak meg kell nyitnia egy hálózati erőforrást.

A szinkron metódusok a következők:

Az aszinkron metódusok a következők:

Az aszinkron metódusok esetében mindegyik metódus rendelkezik egy megfelelő End... metódussal az aszinkron kérés befejezéséhez, valamint egy Mégse... metódussal egy függőben lévő kérés visszavonásához. A Media Foundation aszinkron metódusairól további információt Aszinkron visszahívási módszerekcímű témakörben talál.

Az alábbi példakód egy URL-címből hoz létre médiaforrást. Ez a példa a szinkron metódust használja.

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

Forrásfeloldó