我现在正在爬行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)
使用这只是导致程序冻结。
任何帮助将不胜感激!
谢谢您的回复和链接!尤其是清理析构函数如何解锁。现在不是这样的谜。 –