Поделиться через


Шаг 3. Открытие файла мультимедиа

Этот раздел является шагом 3 руководства Воспроизведение файлов мультимедиа с помощью Media Foundation. Полный код показан в разделе Пример воспроизведения сеанса мультимедиа.

Метод CPlayer::OpenURL открывает файл мультимедиа по 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;
}

Этот метод выполняет следующие действия:

  1. Вызывает CPlayer::CreateSession для создания нового экземпляра сеанса мультимедиа. См . раздел Шаг 4. Создание сеанса мультимедиа.
  2. Создает источник мультимедиа на основе URL-адреса. Полный код для этого шага показан в разделе Использование сопоставителя источника.
  3. Вызывает IMFMediaSource::CreatePresentationDescriptor , чтобы получить дескриптор представления источника мультимедиа. Дескриптор презентации описывает все потоки в исходном файле.
  4. Создает топологию воспроизведения. Код для этого шага показан в разделе Создание топологий воспроизведения.
  5. Вызывает МЕТОД IMFMediaSession::SetTopology , чтобы задать топологию в сеансе мультимедиа.

Метод SetTopology выполняется асинхронно. По завершении вызывается метод IMFAsyncCallback::Invoke объекта CPlayer; См . раздел Шаг 5. Обработка событий сеанса мультимедиа.

Далее: Шаг 4. Создание сеанса мультимедиа

Воспроизведение звука/видео

Воспроизведение файлов мультимедиа с помощью Media Foundation