確定後清理,所以我得到MediaFoundation的要點: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(立即/ clear_current沒有標誌)可能導致內存泄漏,因爲會話從隊列中刪除拓撲,而我的應用程序沒有機會在其源上調用關閉。另外,如果在設置下一個mediaSource的拓撲之前(即,在我收到MESessionTopologyStatus事件之前)我調用當前mediaSource上的Shutdown,則我無法播放下一個mediaSource。爲什麼?我不知道,msdn並沒有解釋當我調用mediaSource時發佈什麼資源,所以我想我仍然需要爲了播放下一個媒體資源而正在發佈...