开发背景:
基于64位win7旗舰版,vs2012 ultramate平台,使用MFC机制利用DirectShow开发包开发一款多媒体播发器,实现基本的播放控制功能。
开发步骤:
一、下载Microsoft SDKs
win7以后DirectShow已经脱离DirectX,而集成到C:\Program Files\Microsoft SDKs\Windows\v7.1,如果没有这个目录,则从微软官网下载整个Microsoft SDKs,
安装。
二、运行SDK下的sample例程,得到运行DirectShow所需要的头文件及库文件
运行C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses下的baseclasses.sln这是个vs2010工程,因此先升级为vs2012工程,
分别配置四种工程平台属性:Debug、Debug_MBCS、Release、Release_MBCS,生成四个库文件,用于后续开发时选择对应的.lib文件。
三、开发多媒体播放器Player时遇到的bug及sln
(1)文件名、变量重定义
bug:
配置DirectShow所需的头文件及库文件时遇到重复定义问题
sln:
我将所需的include及lib提出来,放到了Player工程下进行引用配置,避免了此问题。include文件包含上述的C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses,lib文件为quartz.lib strmbasd.lib strmbase.lib strmiids.lib Uuid.lib WinMM.lib。
(2)使用“在静态库中使用MFC”出现afx.h错误
bug:
配置为Release属性,选择“在静态库中使用MFC”出现错误
sln:
工程Player属性页->配置属性->c/c++->代码生成->运行库->多线程(/MT)
(3)使用IVideoWindow视频窗口接口进行全屏,退出全屏后黑屏
bug:
IVideoWindow->put_FullScreenMode()退出全屏后,视屏区黑屏,但有声音且媒体流在持续播放中
sln:
据说~是由于WIN7的桌面管理问题导致的,可以采用另外的VMR接口技术管理视屏区进行无窗口模式或者仿真全屏手段进行全屏
(4)抓图功能抓到的图不能粘贴至桌面
bug:
视屏播放中,添加了抓图功能,但抓到的图可以粘贴word中进行编辑,但不能粘贴到桌面
sln:
SetClipboardData()函数是将图片内容复制到剪贴板,而不是将图片文件复制到剪贴板,因此不能将图片内容粘贴到桌面