【发布时间】:2014-02-13 04:25:34
【问题描述】:
好的,我了解了 MediaFoundation 的要点:
当我启动我的应用程序时,我会创建一个 IMFMediaSession。
当我想播放文件时,我创建了一个 IMFMediaSource,创建了必要的 IMFTopology,并将其设置为 IMFMediaSession。根据使用的标志 (dwSetTopologyFlags),新媒体源将立即播放,或者在现有拓扑/媒体源播放完毕后添加到 MediaSession 播放的队列中。
现在我的问题是清理旧媒体资源。
在即将删除所使用的拓扑之前,是否有由 MediaSession 发送的事件?这样我就可以从那里访问媒体源并对其调用 ShutDown(从而避免内存泄漏),而不必在我的代码中保留对以前的 mediaSessions 的引用。
//============================================ ===================================== 更新:
根据MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/aa372153%28v=vs.85%29.aspx 在发布之前,我需要在我创建的任何 IMFMediaSource 上调用 ShutDown。
考虑到这一点,混合 MFSESSION_SETTOPOLOGY_FLAGS(没有标志的即时/清除当前)可能会导致内存泄漏,因为会话会从其队列中删除拓扑,而我的应用程序没有机会对其源调用关闭。
另外,如果我在设置下一个 mediaSource 的拓扑之前(即在我收到 MESessionTopologyStatus 事件之前)对当前 mediaSource 调用 Shutdown,那么我无法播放下一个 mediaSource。为什么?我不知道,当我在 mediaSource 上调用 shudown 时,msdn 没有解释释放了哪些资源,所以我想我仍然需要一些东西才能播放下一个正在释放的 mediaSource...
【问题讨论】:
标签: windows-7 ms-media-foundation