Paso 3: Abrir un archivo multimedia
Este tema es el paso 3 del tutorial Cómo reproducir archivos multimedia con Media Foundation. El código completo se muestra en el tema Ejemplo de reproducción de sesión multimedia.
El CPlayer::OpenURL
método abre un archivo multimedia desde una dirección 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;
}
Este método realiza los pasos siguientes:
- Llama a CPlayer::CreateSession para crear una nueva instancia de la sesión multimedia. Consulte Paso 4: Crear la sesión multimedia.
- Crea un origen multimedia a partir de la dirección URL. El código completo de este paso se muestra en el tema Uso de la resolución de origen.
- Llama a IMFMediaSource::CreatePresentationDescriptor para obtener el descriptor de presentación del origen multimedia. El descriptor de presentación describe cada flujo del archivo de origen.
- Crea la topología de reproducción. El código de este paso se muestra en el tema Crear topologías de reproducción.
- Llama a IMFMediaSession::SetTopology para establecer la topología en la sesión multimedia.
El método SetTopology se completa de forma asincrónica. Cuando se completa, se llama al método IMFAsyncCallback::Invoke del objeto CPlayer; consulte Paso 5: Controlar eventos de sesión multimedia.
Siguiente: Paso 4: Crear la sesión multimedia
Temas relacionados