我現在正在爬行Windows Media Foundation的陡峭學習曲線,我正在關注兩個非常相似的代碼示例以幫助我理解該技術。即使兩個媒體會話都使用一個非常簡單的「播放」程序來播放文件中的視頻,但仍有一些重要的細微差別。其中MF Play示例代碼在Media Foundation中顯示正確的COM技術?
第一個樣品是微軟的MF播放位於:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd979592(v=vs.85).aspx
它不會初始化COM和不執行任何關鍵部分鎖但它播放視頻非常好。缺乏使用COM會限制它以其他方式使用,例如處理多個視頻流以通過多線程分離窗口?由於此代碼在線,因此我可能會天真地認爲此代碼更新。
第二個示例來自「開發微軟媒體基礎應用程序 - 安東波林格」一書。我下載的示例代碼從這裏: https://www.microsoftpressstore.com/content/images/9780735656598/downloads/9780735656598_files.zip
在第3章的文件夾此播放程序稍微複雜,由於使用這些COM初始化函數:
// initialize COM
hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
...
// uninitialize COM
CoUninitialize();
它還使用了幾個關鍵部分鎖使用:
CComCritSecLock<CComAutoCriticalSection> lock(m_critSec);
但鬼使神差沒有相應的解鎖()。那麼有人可以解釋這兩個代碼示例之間的這些潛在的重要差異,以及我應該使用哪些?我擔心,如果我不使用COM方法,那麼當我嘗試將多個視頻流到多個窗口時,我可能會遇到問題,或者更糟糕的是,我可能會遇到可靠性問題。
在附註中,Polinger代碼有效,但在播放視頻時無法處理窗口大小調整。我試圖以類似於MS代碼不使用窗口大小調整事件之後,這段代碼的方式添加代碼:
m_pVideoDisplay->SetVideoPosition(NULL, &rcDest)
使用這只是導致程序凍結。
任何幫助將不勝感激!
謝謝您的回覆和鏈接!尤其是清理析構函數如何解鎖。現在不是這樣的謎。 –