Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается шаг 7 руководства воспроизведение файлов мультимедиа с помощью Media Foundation. Полный код показан в разделе пример воспроизведения сеансов мультимедиа.
Чтобы завершить работу сеанса мультимедиа, выполните следующие действия:
- Вызовите IMFMediaSession::Close, чтобы закрыть текущую презентацию.
- Дождитесь события MESessionClosed. Это событие гарантированно будет последним событием из сеанса мультимедиа.
- Вызов IMFMediaSession::Shutdown. Этот метод заставляет медиасессии освобождать ресурсы.
- Вызовите метод IMFMediaSource::Shutdown для текущего источника мультимедиа.
Следующий метод завершает работу сеанса мультимедиа. Он использует дескриптор событий (m_hCloseEvent) для ожидания события MESessionClosed. См. шаге 5. Обработка событий сеанса мультимедиа.
// Close the media session.
HRESULT CPlayer::CloseSession()
{
// The IMFMediaSession::Close method is asynchronous, but the
// CPlayer::CloseSession method waits on the MESessionClosed event.
//
// MESessionClosed is guaranteed to be the last event that the
// media session fires.
HRESULT hr = S_OK;
SafeRelease(&m_pVideoDisplay);
// First close the media session.
if (m_pSession)
{
DWORD dwWaitResult = 0;
m_state = Closing;
hr = m_pSession->Close();
// Wait for the close operation to complete
if (SUCCEEDED(hr))
{
dwWaitResult = WaitForSingleObject(m_hCloseEvent, 5000);
if (dwWaitResult == WAIT_TIMEOUT)
{
assert(FALSE);
}
// Now there will be no more events from this session.
}
}
// Complete shutdown operations.
if (SUCCEEDED(hr))
{
// Shut down the media source. (Synchronous operation, no events.)
if (m_pSource)
{
(void)m_pSource->Shutdown();
}
// Shut down the media session. (Synchronous operation, no events.)
if (m_pSession)
{
(void)m_pSession->Shutdown();
}
}
SafeRelease(&m_pSource);
SafeRelease(&m_pSession);
m_state = Closed;
return hr;
}
Перед завершением работы приложения завершите сеанс мультимедиа, а затем вызовите MFShutdown, чтобы завершить работу платформы Microsoft Media Foundation.
// Release all resources held by this object.
HRESULT CPlayer::Shutdown()
{
// Close the session
HRESULT hr = CloseSession();
// Shutdown the Media Foundation platform
MFShutdown();
if (m_hCloseEvent)
{
CloseHandle(m_hCloseEvent);
m_hCloseEvent = NULL;
}
return hr;
}
Связанные разделы