对于刚刚接触 DirectShow 的人来说,安装配置是一个令人头疼的问题,经常出现的情况是最基本的 baseclass 就无法编译。
一开始我也为此费了很大的功夫,比如说修改代码、修改编译选项使其编译通过。因为大家 Visual Studio 的版本与 DirectShow 的版本各不相同,导致问题多种多样。网上的参考也不可尽信,往往花费了大量的时间和精力,程序仍没有编译通过,而丧失学习 DirectShow 的兴趣和信心。
我在 Visual Stdio 6.0,2003,2005,2008 都尝试过了配置 DirectShow,基本可以达到不需要修改代码就可以编译通过。经验就是,要配合 Visual Studio 的版本选择不同的 DirectShow 的版本。一般来说,要选取 比同时期的 Visual Studio 略晚发行的 DirectShow 版本。(我觉得,微软至少要对新发行的 DirectShow SDK 在当前主流的编译环境中测试才对,所以一般这种匹配都是很容易一下子编译通过。)
Visual C++ 6.0
陆其明老师的《DirectShow 开发指南》是一本不错的书,使用的环境就是 VC 6.0。按照我刚才的理论,几乎所有的 DirectShow 版本都可以容易的安装在 VC 6 上,因为它太古老了。不过,要是安装最新的 SDK 反而不行,因为 VC 6 的编译器问题很多,对标准支持得也不是很好,所以导致最新的 SDK 无法编译。
陆的书上所用的版本其实是 dx9sdk.exe (2002.12.19),我这里给出的是微软官方的链接(他们把所有的版本都保留了),需要正版验证才能下载(应该不成问题吧...)。
我建议使用 DirectX SDK Summer 2004 版本,这个版本是最后一个整合 DirectShow 的 DirectX SDK版本。
之后微软把 DirectShow 分离出来了,比如需要安装 DirectX SDK April 2005 版本再加上 DirectX SDK February 2005 Extras。也就是说,DirectX 已经不含 DirectShow,这个时候(2005年)它被包含在 Extras 里面。所以安装了 Extras 基本上就可以进行 DirectShow 开发了。
Visual Studio 2003
这个版本建议安装 Summer 2004 这个版本。Extras 也没问题。
Visual Studio 2005
这个版本我用的不是很多,印象中安装 Summer 2004 没问题,甚至更低的 9.0b 也没问题。安装很新的版本就会出现我说的那种太超前反而编译不了的现象。
大概到 2006 年,DirectShow 就被包含在了 Windows Platform SDK 中。不知道最新的 Platform SDK 对 VS2005 支持地如何,我没有去试。之前有一个版本需要修改一些代码才能编译。
Visual Studio 2008
非常简单,安装最新版的 DirectX SDK June 2008 和 Platform SDK (2006.03.15) 即可。另外,Platform SDK 的后续版本似乎叫 Windows SDK,内含的 Media Foundation 似乎要取代 DirectShow。(Windows SDK for Windows Server 2008 and .NET Framework 3.5 2008.02.05)
进行环境配置
如果 DirectShow 的版本比 VS 要新,则相应的头文件和库文件就会自动配置,否则就要手动添加。
如果安装的 DirectShow 比较早,那么在 baseclasses 里面就会有相应的工程文件,打开编译即可。如果安装的是 Platform SDK 就会只有一个 makefile,注意到在安装完 Platform SDK 以后,开始菜单会有一些进入不同编译环境的快捷方式,选一个想编译的版本进入,然后在 baseclasses 下 输入 nmake,就会自动编译了。
还需要注意的就是一些库的引用、编译链接的选项等等,在出现问题的时候搜索就行,一般不是大问题。
2008-07-29 Up:
有一篇文章可以在遇到编译错误的时候参考:Some DirectShow Samples Break in Visual Studio 2005。
我一直在 NOD32 和 AntiVir 之间犹豫,前者我有正版 ID,后者用免费版,所以需要考虑的是杀毒能力和资源占用。因为我的机器基本不中毒和木马,所以资源占用我更看重一些。
我在几台机器上都分别用过这两个软件,感觉 NOD32 有的时候会卡,比如播放视频文件(即使我设置 avi 文件不扫描) ,比如在打开一个目录的时候。这点让我很难忍受,因为我经常要进行大量的文件操作,这让我感觉我的机器很慢,很不舒服。
AntiVir 感觉就很快,而且它的警报也多(虽然基本都是误报,但有些也是边缘化的软件,或者涉及密码的网页、脚本),让我感觉它在起作用。唯一的问题就是升级需要连国际网,每次升级有广告,不过是免费软件,这点可以接受。
既然两者测评的结果差不多,我决定还是换成 AntiVir,因为小红伞的图标也很可爱。
其一:显卡罢工
昨日深夜,代码正写得兴高采烈,突然显示器不亮了,显示找不到信号。查遍原因,原来是因为灰尘太多,风扇不转了,导致显卡罢工。我刚换的风扇没多久啊...这地方真是灰大。
其二:萤火虫
今天在校园里跑步的时候,发现了两只萤火虫。第一只我还以为是幻觉,因为正当我准备前去观察的时候,后面一辆车经过,突然变得很亮,然后我就看不到了。我就继续走,结果在草丛中发现了第二只,看了半天...很小很小,不知道古人是如何那它来看书的。我是第一次亲眼见到萤火虫,很激动...
我昨天使用 Google Docs 的时候还在想什么时候可以提供模板来创建比如项目规划、日程安排、报告等具有一定格式的文档,今天就发现新增了这个功能。
点击 Google Docs Templates 可以浏览所有的模板,有很多非常好看。可以预览或者使用模板新建文档。在文档主页也可以选择使用模板新建。
不过 Google Docs 还有很多缺点,比如速度不快,文档列表编辑后不能自动刷新,编辑功能不够强大。
模板似乎只有300余个,希望以后能自己编辑模板上传。
刚才在使用 Google Docs 的时候,右上角出现一个调查问卷,我还认真答了一番。
信息过载问题越来越被重视,订阅了这么多 RSS Feed,并不是每篇文章都值得认真阅读。AideRSS 就是通过给每篇文章计算 PostRank 值来评价其重要性。简单的说,就是通过综合考虑文章的反向链接、评论数、Digg 、Del.icio.us 收藏等等来给出一个评分,AideRSS 依照这个分数可以重新过滤并输出一个新的 RSS,这样就可以只订阅评分高的文章了。
现在 AideRSS 推出了一个 AideRSS + GoogleReader Firefox 扩展,其实是一个 Greasemonkey 脚本,可以直接从网站上安装脚本。它会在 Google Reader 的每篇文章之前显示一个 PostRank 值,还提供了一个选单可以过滤不同等级的文章。
还有两个键盘操作(List View 模式下):
- x:切换被过滤的条目显示的显示方式,隐藏或者淡化。
- c:用不同颜色表示不用的来源。
我有一台 Sony MD MZ-N10,是好多年前买的,后来因为著名的 PC-MD 问题修理了两次,大大打击了我对 MD 的喜爱。前年,又因为 MD 出现了待机状态耗电太快的问题,我就把它闲置了。
昨天因为要给那个 Sony 小本找光驱,又把它翻出来了。因为这东西还挺贵的,用的时候很小心,所以还是95新,就又摆弄了一番,而且把待机耗电的问题也解决了。
感觉音质还是不错,比我那个 Benq 的华而不实的 MP3 要强...
附,我遇见的 Sony MD N10 的问题:
- PC-MD 问题:PC-MD 状态显示不正常。这个问题是主板设计的时候没有充分考虑到浪涌问题,导致主板某地方被击穿。送修吧,一般也要好几百。
- 主机耗电:不开机放置一段时间后电量自动消耗。首先查看设置里面的 power mode 是否设置在 quick 模式,只要调到 normal 即可;否则可能是电路电源管理 ic 故障,送修吧。
附:官方相关下载
我有一个 Sony 的小本,曾经通过硬盘安装了 Ubuntu。现在我想重装系统,一不小心(或者说手贱)把 Ubuntu 的分区先给删除了,然后 GRUB 就无法启动,显示 Error 17。
本机无软驱、无光驱、无法USB启动,几乎无法使用非 Sony 的外设启动(比如非原装的 USB 光驱),现在又无法通过硬盘启动,好在通过 BIOS 设置,可以从网络启动。首先列举需要的装备:
- 作为 PXE 服务器的主机。
- 路由器+网络环境。
- 客户机,带有支持 PXE 启动的网卡。
重点就是如何搭建 PXE 服务器环境(可以理解为 DHCP Server + TFTP Server),如果主机是 Windows Server 可以通过安装 RIS(远程安装服务)来配置,但是我的主机是 Windows XP,所以我选用了第三方软件来实现,绿色免安装,而且不用重启,非常方便!如果主机是 Linux 或者其他系统,只要配置好 DHCP 和 TFTP 服务,应该就可以了。
说了这么多,下面给出操作步骤,非常简单:
- 下载 Tftpd32,解压缩即可。
- 运行 Tftpd32,设置启动文件存放的目录(什么是启动文件?下面介绍),和 DHCP 选项卡的内容,我的主机是 192.168.1.100,下面的设置:
->IP pool starting address:192.168.1.101
->Size of pool:100
->Boot File:刚才设置的目录下的启动文件
->Mask:255.255.255.0
其他不用改,点 Save 保存。 - 开启客户机,就会自动搜索网络,自动下载启动文件,就启动了。
还有一个要解决的问题:启动文件哪里找?这个要启动不同的系统需要的文件是不一样的,比如启动 WinPE 需要:startrom.n12,ntldr,ntdetect.com,winnt.sif,WinPE 映像文件,把这些文件都复制到 Tftpd32 设置的目录,然后配置好 winnt.sif 即可。详细可以查看这篇:PXE服务器架设指南及PXE启动WinPE(含PE2.0)解决方案总结。
如果你觉得文件不太好找,还有更方便的方法,去 MouseDos 下载一个 WinPE 超级网克工具箱 PXE 版,什么都有了,只是注意,这个工具箱里面的 WinPE 启动以后回自动 Ghost 硬盘,所以在填写 GHO 文件的时候随便写一个假的即可,找不到文件回自动退回到 WinPE,这个时候就可以进行分区之类的操作了。
相关文章(有的我没有仔细看):
