Schritt 3: Öffnen einer Mediendatei

Dieses Thema ist Schritt 3 des Tutorials Wiedergeben von Mediendateien mit Media Foundation. Der vollständige Code wird im Thema Media Session Playback Example (Beispiel für die Mediensitzungswiedergabe) angezeigt.

Die CPlayer::OpenURL -Methode öffnet eine Mediendatei aus einer 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;
}

Diese Methode führt die folgenden Schritte aus:

  1. Ruft CPlayer::CreateSession auf, um eine neue instance der Mediensitzung zu erstellen. Weitere Informationen finden Sie unter Schritt 4: Erstellen der Mediensitzung.
  2. Erstellt eine Medienquelle aus der URL. Den vollständigen Code für diesen Schritt finden Sie im Thema Verwenden des Quelllösers.
  3. Ruft IMFMediaSource::CreatePresentationDescriptor auf, um den Präsentationsdeskriptor der Medienquelle abzurufen. Der Präsentationsdeskriptor beschreibt die einzelnen Streams in der Quelldatei.
  4. Erstellt die Wiedergabetopologie. Code für diesen Schritt wird im Thema Erstellen von Wiedergabetopologien gezeigt.
  5. Ruft IMFMediaSession::SetTopology auf, um die Topologie für die Mediensitzung festzulegen.

Die SetTopology-Methode wird asynchron abgeschlossen. Nach Abschluss wird die IMFAsyncCallback::Invoke-Methode des CPlayer-Objekts aufgerufen. Siehe Schritt 5: Behandeln von Mediensitzungsereignissen.

Weiter: Schritt 4: Erstellen der Mediensitzung

Audio-/Videowiedergabe

Wiedergeben von Mediendateien mit Media Foundation