DirectShow开发环境搭建(整理)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DirectShow开发环境搭建(整理)
directshow配置
1. 下载安装 DirectX 9.0 SDK Update (February 2005) Extras。
2. 配置IDE环境中的include, lib路径
这步是为了以后更⽅便的做DSHOW开发,不⽤每次对每个⼯程都添加路径。
我的系统是32位win7+VS2010,需要到C:\Users\chef\AppData\Local\Microsoft\MSBuild\v4.0(chef是我的⽤户名)⽬录下修改er.props,这是⼀个XML⽂件,在节点IncludePath和LibraryPath分别添加上dshow sdk的include和lib路径就⾏了,不同路径间⽤分号隔离。
3. 编译baseclass
应该是对dshow的⼀个简单封装吧,据说⽤它开发⽐较⽅便。
到DirectX 9.0 SDK Update (February 2005) Extras\DirectShow\Samples\C++\DirectShow\BaseClasses下编译该⼯程。
貌似会出现⼀些for循环内定义变量的作⽤域、static定义变量省略了int类型等⼩问题,⼤家对照着错误提⽰修改⼀下就好了。
这⾥⽽外说⼀句,开源的东西拿过来⽤往往都会出现⼀些问题,这时不要⼼烦,不要急着到处问⼈,到处找⼈帮忙,应该积累看错误、改错误的经验,这也是初学者与有⼀定⼯作经验的程序员之间的⼀个显著区别吧。
4. 编译AMCap
AMCap是⼀个通过摄像头采集视频并存成⽂件的⼯程,位置在DirectX 9.0 SDK Update (February 2005)
Extras\DirectShow\Samples\C++\DirectShow\Capture\AMCap。
编译前先到项⽬属性的preprocessor definition中把WINVER、_WIN32_WINNT的值修改⼀下,这两个宏定义标志你使⽤的系统型号及版本, windows SDK中会根据这两个宏决定你是否能使⽤⼀些函数,我是改成0X0600了,之后应该就能成功编译了。
5. 总结
我学习DSHOW的⽬的是⽤来做摄像头视频采集的,但⽆论是⽹上的⼀些代码⽰例还是 SDK 中的example(例如就我看来最接近我⽬的的AMCap),都是过于复杂、过度封装、功能不纯粹(当然这是对于我这个菜鸟来说拉),我想要的不过是⼀个最简单的采集功能,封成接⼝后简单配置⼀下调⽤start就返上来数据,不需要界⾯、不需要播放、不需要存⽂件。
与其从这些⼯程中抽代码出来,还不如看看dshow的东西。
在⽹上也找了⼀些资料,最后发现还是SDK中所带的帮组⽂档directshow.chm最全也最清楚。
个⼈感觉⼀般SDK带的manual⽂档,英⽂版的看起来都⽐较轻松(可能是都带着例⼦吧,如果是看RFC的英⽂版那真是越看越想哭),仇恨英⽂的同学可以上⽹找中⽂版, dshow最常见的那份资料就是拉。
directshow.chm 的getting started 的 how to play a file 中有⼀份完整的播放视频⽂件的源码,有效代码也就10来⾏,⼤家可以建个⼯程编译下试试(需要链接Strmiids.lib, Quartz.lib),正好也可以测试⼀下IDE的环境变量是否设置成功(上⾯的AMCap是在项⽬属性中已经设置了dshow的inc、lib路径),我⽤这段代码成功播放了⼀个wmv⽂件。
另外我调⽤CoInitialize初始化COM library失败了,改⽤CoInitializeEx成功,没有系统的学过COM知识,粗略看了⼀下MSDN不知道是什么原因,以后有需要再去看看COM知识吧。