如何使用 Media Foundation 播放媒体文件

本教程演示如何使用 媒体会话 对象播放媒体文件。

先决条件

阅读本主题之前,应熟悉以下媒体基础概念:

注意

本主题不介绍如何播放受数字权限管理保护的文件 (DRM) 。 有关 Microsoft Media Foundation 中的 DRM 的信息,请参阅 如何播放受保护的媒体文件

 

概述

以下对象用于使用媒体会话播放媒体文件:

  • 媒体源是分析媒体文件或其他媒体数据源的对象。 媒体源为文件中的每个音频或视频流创建 对象。 解码器 将编码的媒体数据转换为未压缩的视频和音频。
  • 源解析程序从 URL 创建媒体源。
  • 增强的视频呈现器 (EVR) 将视频呈现到屏幕。
  • 流式音频呈现器 (SAR) 将音频呈现给扬声器或其他音频输出设备。
  • 拓扑定义从媒体源到 EVR 和 SAR 的数据流。
  • 媒体会话控制数据流并将状态事件发送到应用程序。 下图演示了此过程。

diagram showing playback using the media session

下面是使用媒体会话播放媒体文件所需的步骤的一般概述:

  1. 调用 MFStartup 函数以初始化 Media Foundation 平台。

  2. 调用 MFCreateMediaSession 以创建新的媒体会话实例。

  3. 使用源解析程序创建媒体源。 有关详细信息,请参阅 使用源解析程序

  4. 创建将媒体源连接到 EVR 和 SAR 的拓扑。 在此步骤中,应用程序创建不包含解码器的 部分 拓扑。 有关详细信息,请参阅 创建播放拓扑

  5. 调用 IMFMediaSession::SetTopology 在媒体会话上设置拓扑。

  6. 使用 IMFMediaEventGenerator 接口从媒体会话获取事件。

  7. 调用 IMFMediaSession::"开始"菜单开始播放。 播放开始后,可以通过调用 IMFMediaSession::P ause 来暂停它,也可以通过调用 IMFMediaSession::Stop 来停止它。

  8. 应用程序退出时,释放资源:

    1. 调用 IMFMediaSession::关闭 媒体会话。 此方法是异步方法。 完成后,媒体会话会发送 MESessionClosed 事件。 然后,可以安全地执行剩余的步骤。
    2. 调用 IMFMediaSource::Shutdown 关闭媒体源。
    3. 调用 IMFMediaSession::关闭 以关闭媒体会话。
    4. 调用 MFShutdown 关闭 Media Foundation 平台。

以下部分显示了完整的代码示例:

媒体会话

音频/视频播放