媒体播放:从参数设置到异步事件处理
在媒体播放的开发过程中,涉及到诸多关键操作和概念,下面将详细介绍其中的重要部分。
1. IMFMediaSession::SetTopology() 函数参数标志
IMFMediaSession::SetTopology()
函数的第一个参数是以下标志的可选组合:
| 标志 | 说明 |
| ---- | ---- |
| MFSESSION_SETTOPOLOGY_IMMEDIATE | 停止当前加载媒体的播放(如果有),并立即应用拓扑。 |
| MFSESSION_SETTOPOLOGY_NORESOLUTION | 这是一个完整(非部分)拓扑,无需解析。MF 无需尝试添加任何缺失的 MFT,会话可以直接接受该拓扑。 |
| MFSESSION_SETTOPOLOGY_CLEAR_CURRENT | 如果第二个参数为 NULL,则清除与会话关联的任何拓扑。如果第二个参数不为 NULL,则仅当传入的拓扑与当前与会话关联的拓扑匹配时,才重置会话。 |
传入 0 也是有效的,表示未指定任何标志。如果未指定 MFSESSION_SETTOPOLOGY_IMMEDIATE
标志,并且会话中已经有一个拓扑排队,则新拓扑将添加到队列中。在这种情况下,会话完成第一个拓扑的播放后,将开始播放第二个拓扑。这在拓扑解析可能需要很长时间,且你不希望多个内容播放之间有间隙时非常有用。
2. 媒体会话异步事件
所有 Windows 应用程序本质上都是异步的,它们通过消息循环不断等待事件,并根据事件信息执行不同的操作。