IMFMediaSession::SetTopology 方法 (mfidl.h)

在媒体会话上设置拓扑。

语法

HRESULT SetTopology(
  [in] DWORD       dwSetTopologyFlags,
  [in] IMFTopology *pTopology
);

parameters

[in] dwSetTopologyFlags

MFSESSION_SETTOPOLOGY_FLAGS 枚举中零个或多个标志的按位 OR

[in] pTopology

指向拓扑对象的 IMFTopology 接口的指针。

返回值

该方法返回 HRESULT。 可能的值包括(但并不限于)下表中的项。

返回代码 说明
S_OK
方法成功。
MF_E_INVALIDREQUEST
无法在媒体会话的当前状态下执行该操作。
MF_E_SHUTDOWN
媒体会话已关闭。
MF_E_TOPO_INVALID_TIME_ATTRIBUTES
拓扑具有以下一个或多个属性的无效值:
NS_E_DRM_DEBUGGING_NOT_ALLOWED
调试时无法播放受保护的内容。

注解

如果 pTopology 是完整的拓扑,请在 dwSetTopologyFlags 参数中设置MFSESSION_SETTOPOLOGY_NORESOLUTION标志。 否则,假定拓扑是部分拓扑。 媒体会话使用拓扑加载程序将部分拓扑解析为完整拓扑。

如果媒体会话当前已暂停或停止, 则 SetTopology 方法在下次调用 IMFMediaSession::Start 之前不会生效。

如果媒体会话当前正在运行,或在下次调用 Start 时, SetTopology 方法将执行以下操作:

  • 如果在 dwSetTopologyFlags 中设置了MFSESSION_SETTOPOLOGY_IMMEDIATE标志,媒体会话会立即结束当前演示文稿,清除所有挂起的拓扑,并使用 pTopology 启动新的演示文稿。
  • 否则,媒体会话会将 pTopology 排队,并在当前演示文稿完成时启动新演示文稿。 如果没有当前演示文稿,则新演示文稿将立即启动。
  • 从 Windows 7 开始,还可以指定 MFSESSION_SETTOPOLOGY_CLEAR_CURRENT 标志以清除当前拓扑,但将任何其他挂起的拓扑保留在队列中。
此方法是异步方法。 如果该方法返回S_OK,则媒体会话将在操作完成时发送 MESessionTopologySet 事件。 如果媒体会话当前暂停以停止,媒体会话不会发送 MESessionTopologySet 事件,直到下一次调用 IMFMediaSession::Start

要求

   
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 mfidl.h
Library Mfuuid.lib

另请参阅

IMFMediaSession