Étape 3 : Ouvrir un fichier multimédia

Cette rubrique est l’étape 3 du tutoriel Guide pratique pour lire des fichiers multimédias avec Media Foundation. Le code complet est présenté dans la rubrique Media Session Playback Example( Exemple de lecture de session multimédia).

La CPlayer::OpenURL méthode ouvre un fichier multimédia à partir d’une URL.

//  Open a URL for playback.
HRESULT CPlayer::OpenURL(const WCHAR *sURL)
{
    // 1. Create a new media session.
    // 2. Create the media source.
    // 3. Create the topology.
    // 4. Queue the topology [asynchronous]
    // 5. Start playback [asynchronous - does not happen in this method.]

    IMFTopology *pTopology = NULL;
    IMFPresentationDescriptor* pSourcePD = NULL;

    // Create the media session.
    HRESULT hr = CreateSession();
    if (FAILED(hr))
    {
        goto done;
    }

    // Create the media source.
    hr = CreateMediaSource(sURL, &m_pSource);
    if (FAILED(hr))
    {
        goto done;
    }

    // Create the presentation descriptor for the media source.
    hr = m_pSource->CreatePresentationDescriptor(&pSourcePD);
    if (FAILED(hr))
    {
        goto done;
    }

    // Create a partial topology.
    hr = CreatePlaybackTopology(m_pSource, pSourcePD, m_hwndVideo, &pTopology);
    if (FAILED(hr))
    {
        goto done;
    }

    // Set the topology on the media session.
    hr = m_pSession->SetTopology(0, pTopology);
    if (FAILED(hr))
    {
        goto done;
    }

    m_state = OpenPending;

    // If SetTopology succeeds, the media session will queue an 
    // MESessionTopologySet event.

done:
    if (FAILED(hr))
    {
        m_state = Closed;
    }

    SafeRelease(&pSourcePD);
    SafeRelease(&pTopology);
    return hr;
}

Cette méthode effectue les étapes suivantes :

  1. Appelle CPlayer::CreateSession pour créer un instance de la session multimédia. Consultez Étape 4 : Créer la session multimédia.
  2. Crée une source multimédia à partir de l’URL. Le code complet de cette étape est présenté dans la rubrique Utilisation du programme de résolution de source.
  3. Appelle IMFMediaSource::CreatePresentationDescriptor pour obtenir le descripteur de présentation de la source multimédia. Le descripteur de présentation décrit chaque flux dans le fichier source.
  4. Crée la topologie de lecture. Le code de cette étape est présenté dans la rubrique Création de topologies de lecture.
  5. Appelle IMFMediaSession::SetTopology pour définir la topologie sur la session multimédia.

La méthode SetTopology se termine de manière asynchrone. Une fois l’opération terminée, la méthode IMFAsyncCallback::Invoke de l’objet CPlayer est appelée ; consultez Étape 5 : Gérer les événements de session multimédia.

Suivant : Étape 4 : Créer la session multimédia

Lecture audio/vidéo

Guide pratique pour lire des fichiers multimédias avec Media Foundation