É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 :
- Appelle CPlayer :: CreateSession pour créer une nouvelle instance de la session multimédia. Consultez Step 4 : Create the Media session.
- 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.
- 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.
- Crée la topologie de lecture. Le code pour cette étape est présenté dans la rubrique création de topologies de lecture.
- 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