Passaggio 3: Aprire un file multimediale
Questo argomento è il passaggio 3 dell'esercitazione Come riprodurre file multimediali con Media Foundation. Il codice completo è illustrato nell'argomento Esempio di riproduzione di sessioni multimediali.
Il CPlayer::OpenURL
metodo apre un file multimediale da un 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;
}
Questo metodo esegue i passaggi seguenti:
- Chiama CPlayer::CreateSession per creare una nuova istanza della sessione multimediale. Vedere Passaggio 4: Creare la sessione multimediale.
- Crea un'origine multimediale dall'URL. Il codice completo per questo passaggio è illustrato nell'argomento Uso del resolver di origine.
- Chiama IMFMediaSource::CreatePresentationDescriptor per ottenere il descrittore di presentazione dell'origine multimediale. Il descrittore di presentazione descrive ogni flusso nel file di origine.
- Crea la topologia di riproduzione. Il codice per questo passaggio è illustrato nell'argomento Creazione di topologie di riproduzione.
- Chiama IMFMediaSession::SetTopology per impostare la topologia nella sessione multimediale.
Il metodo SetTopology viene completato in modo asincrono. Al termine, viene chiamato il metodo IMFAsyncCallback::Invoke dell'oggetto CPlayer; vedere Passaggio 5: Gestire gli eventi della sessione multimediale.
Passaggio 4: Creare la sessione multimediale
Argomenti correlati