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:
- Ruft CPlayer::CreateSession auf, um eine neue instance der Mediensitzung zu erstellen. Weitere Informationen finden Sie unter Schritt 4: Erstellen der Mediensitzung.
- Erstellt eine Medienquelle aus der URL. Den vollständigen Code für diesen Schritt finden Sie im Thema Verwenden des Quelllösers.
- Ruft IMFMediaSource::CreatePresentationDescriptor auf, um den Präsentationsdeskriptor der Medienquelle abzurufen. Der Präsentationsdeskriptor beschreibt die einzelnen Streams in der Quelldatei.
- Erstellt die Wiedergabetopologie. Code für diesen Schritt wird im Thema Erstellen von Wiedergabetopologien gezeigt.
- 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
Zugehörige Themen