Шаг 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;
}
Этот метод выполняет следующие действия:
- Вызывает CPlayer::CreateSession для создания нового экземпляра сеанса мультимедиа. См . раздел Шаг 4. Создание сеанса мультимедиа.
- Создает источник мультимедиа на основе URL-адреса. Полный код для этого шага показан в разделе Использование сопоставителя источника.
- Вызывает IMFMediaSource::CreatePresentationDescriptor , чтобы получить дескриптор представления источника мультимедиа. Дескриптор презентации описывает все потоки в исходном файле.
- Создает топологию воспроизведения. Код для этого шага показан в разделе Создание топологий воспроизведения.
- Вызывает МЕТОД IMFMediaSession::SetTopology , чтобы задать топологию в сеансе мультимедиа.
Метод SetTopology выполняется асинхронно. По завершении вызывается метод IMFAsyncCallback::Invoke объекта CPlayer; См . раздел Шаг 5. Обработка событий сеанса мультимедиа.
Далее: Шаг 4. Создание сеанса мультимедиа
Связанные темы