2014-02-05 8 views
0

좋아, 그래서 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를 재생하기 위해 여전히 필요한 것 같아요.

답변

0

내 경험은 저것입니다. 소스에서 시스템 종료를 호출하지 않으면 메모리 누수가 발생합니다. 내 프로젝트 MFNode를 확인하십시오. 사용자 지정 MediaSession (MFNodePlayer 프로젝트)이 있습니다. 소스에서 종료에 대한 호출의 주석을 제거하면 메모리 누수가 표시됩니다.

소스의 많은 부분이 소스에서 정지 메시지를 기다려야하기 때문에 Shutdown을 호출해야합니다 (일반적으로 비동기입니다). 당신이 그것을 중지하기 전에 소스를 사용하려고하면 , 당신은 이상한 오류/행동 및 메모리 누수에 직면하게 될 것이다.

안정적인 응용 프로그램을 사용하려면 중지하려면 소스를 기다려야합니다. 그리고 Shutdown on source는 여기에 있습니다.

관련 문제