Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается шаг 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, чтобы задать топологию на Media Session.
Метод SetTopology выполняется асинхронно. По завершении вызывается метод IMFAsyncCallback объекта CPlayer::Invoke; см. шаг 5: Обработка событий сеанса мультимедиа.
Далее: шаг 4. Создание сеанса мультимедиа
Связанные разделы