如何使用 Media Foundation 播放媒体文件
本教程演示如何使用 媒体会话 对象播放媒体文件。
先决条件
阅读本主题之前,应熟悉以下媒体基础概念:
注意
本主题不介绍如何播放受数字权限管理保护的文件 (DRM) 。 有关 Microsoft Media Foundation 中的 DRM 的信息,请参阅 如何播放受保护的媒体文件。
概述
以下对象用于使用媒体会话播放媒体文件:
- 媒体源是分析媒体文件或其他媒体数据源的对象。 媒体源为文件中的每个音频或视频流创建 流 对象。 解码器 将编码的媒体数据转换为未压缩的视频和音频。
- 源解析程序从 URL 创建媒体源。
- 增强的视频呈现器 (EVR) 将视频呈现到屏幕。
- 流式音频呈现器 (SAR) 将音频呈现给扬声器或其他音频输出设备。
- 拓扑定义从媒体源到 EVR 和 SAR 的数据流。
- 媒体会话控制数据流并将状态事件发送到应用程序。 下图演示了此过程。
下面是使用媒体会话播放媒体文件所需的步骤的一般概述:
调用 MFStartup 函数以初始化 Media Foundation 平台。
调用 MFCreateMediaSession 以创建新的媒体会话实例。
使用源解析程序创建媒体源。 有关详细信息,请参阅 使用源解析程序。
创建将媒体源连接到 EVR 和 SAR 的拓扑。 在此步骤中,应用程序创建不包含解码器的 部分 拓扑。 有关详细信息,请参阅 创建播放拓扑。
调用 IMFMediaSession::SetTopology 在媒体会话上设置拓扑。
使用 IMFMediaEventGenerator 接口从媒体会话获取事件。
调用 IMFMediaSession::"开始"菜单开始播放。 播放开始后,可以通过调用 IMFMediaSession::P ause 来暂停它,也可以通过调用 IMFMediaSession::Stop 来停止它。
应用程序退出时,释放资源:
- 调用 IMFMediaSession::关闭 媒体会话。 此方法是异步方法。 完成后,媒体会话会发送 MESessionClosed 事件。 然后,可以安全地执行剩余的步骤。
- 调用 IMFMediaSource::Shutdown 关闭媒体源。
- 调用 IMFMediaSession::关闭 以关闭媒体会话。
- 调用 MFShutdown 关闭 Media Foundation 平台。
以下部分显示了完整的代码示例:
- 步骤 1:声明 CPlayer 类
- 步骤 2:创建 CPlayer 对象
- 步骤 3:打开媒体文件
- 步骤 4:创建媒体会话
- 步骤 5:处理媒体会话事件
- 步骤 6:控制播放
- 步骤 7:关闭媒体会话
- 媒体会话播放示例
相关主题