Utilisation du programme de résolution source

Le résolveur de la source crée la source multimédia appropriée pour un contenu donné à partir d'une URL ou d'un flux d'octets. Pour créer le programme de résolution source, appelez MFCreateSourceResolver. Cette fonction retourne un pointeur d’interface IMFSourceResolver .

Le programme de résolution source a des méthodes synchrones et asynchrones. Si vous utilisez le programme de résolution source de votre thread d’application main, les méthodes asynchrones rendent votre interface utilisateur plus réactive. Les méthodes synchrones peuvent bloquer pendant un certain temps, en particulier si le programme de résolution source doit ouvrir une ressource réseau.

Les méthodes synchrones sont les suivantes :

Les méthodes asynchrones sont les suivantes :

Pour les méthodes asynchrones, chaque méthode a une méthode End... correspondante pour terminer la requête asynchrone, et une méthode Cancel... pour annuler une requête en attente. Pour plus d’informations sur les méthodes asynchrones dans Media Foundation, consultez Méthodes de rappel asynchrones.

L’exemple de code suivant crée une source multimédia à partir d’une URL. Cet exemple utilise la méthode synchrone.

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

Programme de résolution source