좋아, 그래서 MediaFoundation의 요점을 얻을 :MediaFoundation : 미디어 소스 후 정리
나는 내 응용 프로그램을 시작할 때 IMFMediaSession을 만듭니다. 나는 내가 IMFMediaSource를 만들 파일을 재생하려면
이 필요한 IMFTopology를 만들고, 나는 IMFMediaSession로 설정합니다. 기존 토폴로지/mediaSources 재생이 완료되면 플래그 사용 (dwSetTopologyFlags) 큐에 즉시하거나 추가됩니다 재생됩니다하거나 새로운 미디어 소스에 따라하는 MediaSession에서 재생할 수 있습니다.
이제 내 문제는 오래된 미디어 소스 후 청소한다.
사용되는 토폴로지를 제거하는 것입니다 직전 MediaSession에 의해 전송되는 이벤트가 있습니까? 그런 식으로 내가 거기에서 미디어 소스에 액세스 할 수 있고 코드에서 이전 mediaSession에 대한 참조를 유지하지 않고도 ShutDown을 호출하여 메모리 누수를 방지 할 수 있습니다.
// =========================================== ==================== 업데이트 :
MSDN에 따라 : http://msdn.microsoft.com/en-us/library/windows/desktop/aa372153%28v=vs.85%29.aspx 내가 만든 IMFMediaSource에서 ShutDown을 호출하기 전에 종료해야합니다.
MFSESSION_SETTOPOLOGY_FLAGS (플래그가없는 immediate/clear_current)를 혼합하면 응용 프로그램이 소스에서 시스템 종료를 호출 할 필요없이 세션에서 대기열에서 토폴로지가 제거되므로 메모리 누수가 발생할 수 있습니다.
또한 다음 mediaSource의 토폴로지가 설정되기 전에 (즉, MESessionTopologyStatus 이벤트가 발생하기 전에) 현재 mediaSource에서 시스템 종료를 호출하면 다음 mediaSource를 재생할 수 없습니다. 왜? 나도 몰라요. msdn은 mediaSource에서 shudown을 호출 할 때 어떤 리소스가 릴리스되는지 설명하지 않습니다. 따라서 다음 mediaSource를 재생하기 위해 여전히 필요한 것 같아요.