不得不说,使用windows的东西确实很麻烦,DirectShow这个东西不断更新换代,书本上的知识完全跟不上时代,只能去博客上查资料。百度之后,看了大量的文章,终于完成了自己的DirectShow安装,配置是Win7+VS2010+Windows SDK 7.1+VS2010SP1(补丁)+VC-Compiler-KB2519277。使用VS2012的同志们要注意了,可能配置的方法会很不一样,因为据说VS2012集成了Windows SDK,不知道DirectShow又没有被集成在里面,待我研究一下再发一篇详细说明。
理论上,安装顺序如各路博主所说(顺便附上下载地址):
(1)visual studio 2010 ( http://pan.baidu.com/s/1o65pOBg 密码: pzpw)
(2)Windows sdk 7.1 (http://www.microsoft.com/en-us/download/details.aspx?id=8279)
(3)Visual studio 2010 sp1 (看博文 http://blog.csdn.net/feidewu/article/details/8105890)
(4)VC-Compiler-KB2519277.exe (http://www.microsoft.com/zh-cn/download/details.aspx?id=4422)
但是里面有很多的细节需要注意,本文中我会以大量图片详细展示安装过程,希望能对大家有所帮助。
先讲了一下自己刚开始安装失败的经历,以供大家借鉴。
电脑上早已经装好了VS2010,这个的安装就不多说,基本就是狂点下一步。然后我下载了Windows SDK 7.1,解压,点击Setup安装,安装很快结束了,并没有提示报错,但这时候去到安装目录下C:\Program Files\Microsoft SDKs\Windows\并没有发现v7.1这个文件夹,说明并未安装成功。百度了一下,发现需要把NetFramework4.0以上的版本卸载掉,于是打开控制面板,发现电脑里装的是NetFramework4.5,于是把所有带NetFramework4.5字样的软件全卸了,包括语言包什么的。
原因可能是SDK 7.1会安装NetFramework4.0到电脑上,因此要是发现电脑上有比4.0还高的版本,肯定就中止安装了。这和后面安装VS2010sp1要先卸载比Microsoft Visual C++ 2010 x86(x64) Redistributable - 10.0.30319 更高的版本原理是一样的。
卸载之后我又装了一遍SDK,这次倒是装上了,发现VS2010却打不开。然而我又不屈不挠的装了VS2010sp1(补丁),结果出错了。
仔细看攻略,原来SDK安装时不能勾选VC_compiler选项,第一次装的SDK的时候肯定是把这个选项勾上了(默认是打勾的)。为了防止再出什么意外,我直接卸载了VS2010和SDK,从头开始。
1、从头开始 Window SDK 7.1
按照博主们提供的步骤,从头开始,先安装VS2010,装完特意去控制面板看了一下,此时已经是NetFramework4.0,看来是VS2010自带的。接下来就可以放心得安装Windows SDK7.1,只是安装时注意不要勾选VC_compiler。装完去安装目录下看一眼,已经有了7.1这个文件夹,说明装好了。
SDK安装过程附图如下:
首先检测已安装的组建
下面这步最重要,一定记得把Visual C++ Compilers 这项的勾去掉
2、VS2010SP1
然后安装VS2010SP1,这虽然只是VS2010的一个补丁,却也有1.5G,最好安装离线版,因为在线安装非常容易中断。安装之前要先卸载掉比Microsoft Visual C++ 2010 x86(x64) Redistributable - 10.0.30319更高的版本(不用卸这个版本),比如11.0.XXXXX等。下图中这个10.0.40219就得卸载掉,后面这个VS2012的补丁最好也卸载掉吧(没在下图这台电脑上试验过,不过如果没装VS2012的话还是卸载掉好)
安装过程比较耗时,几乎和安装VS2010一样慢。
3、VC-Compiler
装完SP1补丁后,还剩最后一步,安装VC编译器,这步没什么好说的,狂点下一步就好了。
4、编译BaseClasses项目
安装完后,需要编译BaseClasses项目,目录为---C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow。《Visual C++音频视频技术开发与实战》一书(后文简称《实战》)中以给出的目录是show\Samples\C++\DirectShow\BaseClasses,因为当时的DirectShow还集成在DirectX里面,而现在是集成在Windows SDK里,以后随着版本不同还可能改变,微软就是这么坑,然而万变不离其宗,大家耐心寻找应该能找到。
找到之后打开sln后缀的项目文件,用VS2010打开,会提示项目版本太低需要转换,按照步骤点下一步转换即可。
然后在VisualStutio里生成解决方案(F7),由于《实战》中用的DirectShow版本较低(VS2005),因此在VS2010中编译时会出现各种错误,作者也给出了详细解答(解决VS里各种莫名其妙的编译错误确实很费脑子)。幸运的是,本文中使用的Windows SDK7.1兼容性还是蛮好,编译一次通过。
为了在项目中使用编译生成的库文件,我们需要在四种模式(Debug,Debug_MBCS,Release,Release_MBCS)下分别编译此工程,可以得到四个类型的strmbasd.lib分别在BaseClasses的相应目录下。
5、添加包含目录、库目录和附加依赖项
编译成功之后需要在项目属性中设置包含路径(Include)和库文件(lib)的路径,新建或打开一个项目,设置项目的通用属性。在属性管理器中选择Debug或Release模式中的Microsoft.Cpp.Win32.user,修改通用属性->C++目录->包含目录,添加以下包含路径(注意顺序不能错,否则会报错)
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\common
C:\Program Files\Microsoft SDKs\Windows\v7.1\Include
C:\Program Files\Microsoft Visual Studio 10.0\VC\include
注意以上路径可能随程序的安装路径而变化,笔者是把所有软件都装在了C:\Program Files下。
在库目录中添加刚刚编译生成的BaseClasses库的lib文件的目录:
C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Debug
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Debug_MBCS
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Release
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Release_MBCS
C:\Program Files\Microsoft Visual Studio 10.0\VC\lib
最后一步是设置通用属性->链接器->输入->依赖附件项, 添加:strmbasd.lib; winmm.lib; msvcrtd.lib; 其他博主们说在windows系统下要用分号隔开,但是我把他们分开放在了三行,也没有问题,可能是放在同一行的话需要分号隔开吧。
配置完成
需要说明的是,在User属性中完成了上述配置,之后再建立新的项目都会继承这些属性,不用重复配置,非常方便。下面就可以开始建立项目体验DirectShow了。
下一篇,如何使用于世祺老师的CameraDS类
参考文献:
http://blog.csdn.net/lzkit/article/details/18501637
http://jingyan.baidu.com/article/546ae1856161cf1149f28c95.html