Compartir a través de


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:

  1. Llama a CPlayer::CreateSession para crear una nueva instancia de la sesión multimedia. Consulte Paso 4: Crear la sesión multimedia.
  2. 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.
  3. 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.
  4. Crea la topología de reproducción. El código de este paso se muestra en el tema Crear topologías de reproducción.
  5. 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

Reproducción de audio y vídeo

Cómo reproducir archivos multimedia con Media Foundation