Étape 3 : ouvrir un fichier multimédia

Cette rubrique est l’étape 3 du didacticiel Comment lire des fichiers multimédias avec Media Foundation. Le code complet est présenté dans la rubrique 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 une nouvelle instance de la session multimédia. Consultez Step 4 : Create the Media session.
  2. Crée une source de média à partir de l’URL. Le code complet de cette étape est présenté dans la rubrique utilisation du programme de résolution source.
  3. Appelle IMFMediaSource :: CreatePresentationDescriptor pour récupérer le descripteur de présentation de la source du média. Le descripteur de présentation décrit chaque flux du fichier source.
  4. Crée la topologie de lecture. Le code pour 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 façon 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

Comment lire des fichiers multimédias avec Media Foundation