Bagikan melalui


Langkah 3: Buka File Media

Topik ini adalah langkah 3 dari tutorial Cara Memutar File Media dengan Media Foundation. Kode lengkap ditampilkan dalam topik Contoh Pemutaran Sesi Media.

Metode CPlayer::OpenURL ini membuka file media dari 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;
}

Metode ini melakukan langkah-langkah berikut:

  1. Memanggil CPlayer::CreateSession untuk membuat instans baru Sesi Media. Lihat Langkah 4: Membuat Sesi Media.
  2. Membuat sumber media dari URL. Kode lengkap untuk langkah ini ditampilkan dalam topik Menggunakan Pemecah Masalah Sumber.
  3. Memanggil IMFMediaSource::CreatePresentationDescriptor untuk mendapatkan deskriptor presentasi sumber media. Deskriptor presentasi menjelaskan setiap aliran dalam file sumber.
  4. Membuat topologi pemutaran. Kode untuk langkah ini ditampilkan dalam topik Membuat Topologi Pemutaran.
  5. Memanggil IMFMediaSession::SetTopology untuk mengatur topologi pada Sesi Media.

Metode SetTopology selesai secara asinkron. Setelah selesai, metode IMFAsyncCallback::Invoke objek CPlayer dipanggil; lihat Langkah 5: Menangani Peristiwa Sesi Media.

Berikutnya: Langkah 4: Membuat Sesi Media

Pemutaran Audio/Video

Cara Memutar File Media dengan Media Foundation