步骤 4:创建媒体会话

本主题是教程如何使用媒体基础播放媒体文件的第 4 步。 完整的代码显示在主题媒体会话播放示例中。

CPlayer::CreateSession 可创建媒体会话的新实例。

//  Create a new instance of the media session.
HRESULT CPlayer::CreateSession()
{
    // Close the old session, if any.
    HRESULT hr = CloseSession();
    if (FAILED(hr))
    {
        goto done;
    }

    assert(m_state == Closed);

    // Create the media session.
    hr = MFCreateMediaSession(NULL, &m_pSession);
    if (FAILED(hr))
    {
        goto done;
    }

    // Start pulling events from the media session
    hr = m_pSession->BeginGetEvent((IMFAsyncCallback*)this, NULL);
    if (FAILED(hr))
    {
        goto done;
    }

    m_state = Ready;

done:
    return hr;
}

此方法执行以下步骤:

  1. 调用 CPlayer::CloseSession 关闭先前的任何媒体会话实例。
  2. 调用 MFCreateMediaSession 创建媒体会话的新实例。
  3. 调用 IMFMediaEventGenerator::BeginGetEvent 方法从媒体会话请求下一个事件。 BeginGetEvent 的第一个参数是指向 CPlayer 对象本身的指针,该对象会实现 IMFAsyncCallback 接口。

步骤 5 中介绍了事件处理。

下一步:步骤 5:处理媒体会话事件

音频/视频播放

如何使用媒体基础播放媒体文件