媒体会话事件

媒体会话的大部分操作都是异步执行的,因此应用程序必须使用媒体会话的 IMFMediaEventGenerator 接口侦听事件。 (IMFMediaSession 接口继承 IMFMediaEventGenerator.) 事件的确切顺序将取决于应用程序,但媒体会话在几乎任何情况下都会引发以下事件。

事件 说明
MEEndOfPresentation 当媒体源完成演示时引发。 数据目前可能仍在管道中移动。
MEError 如果流式处理期间发生错误,则引发。
MESessionClosed Close 方法完成时引发。 此事件是媒体会话排队的最后一个事件。 收到此事件后,可以安全地关闭创建的任何媒体源。
MESessionEnded 在媒体会话完成最后一次演示文稿时引发。
MESessionNotifyPresentationTime 当新演示文稿开始时,通知应用程序演示时间。
MESessionStarted Start 方法完成时引发。 除非发生错误,否则此时数据将通过管道移动。
MESessionTopologySet SetTopology 方法完成时引发。 除非发生错误,否则应用程序无需执行任何操作。
MESessionTopologyStatus 在拓扑状态更改时在不同时间引发。

 

IMFMediaSession::Shutdown 方法不引发事件。 Shutdown 方法是同步的。 此方法返回后,可以安全地释放事件回调指针。

除了来自媒体会话的事件外,应用程序还可以从拓扑中的媒体接收器接收事件。 这些事件可以是媒体接收器定义的自定义事件,其中可能包含任意数据。 例如,接收器可能从源数据派生事件数据,该源数据可能来自不受信任的外部源。 应用程序应忽略它无法识别的任何事件,并在分析事件数据时保持谨慎。

媒体会话