本来就很想自己做个媒体播放器来耍耍,可惜一直没有机会。这次突然有机会接触到个跟视频流打交道的程序。欣喜若狂的开始,却被将近一周的配置DirectShow环境给击倒了。好,言归正题,方便其他人不要再绕很远的路。
首先是SDK的问题,目前DX系列已经发展到9.0了,为了与时俱进我们还是多用最新版本吧。可惜,这个最新版本就是折腾人,网上你搜索DX9.0,绝对能收到一大堆,什么DX9.0c,DX9.0b.......等等,反正什么妖魔鬼怪都出来了。所以建议直接去微软官方下载,多少可以少不少妖魔鬼怪。但是微软也喜欢折腾人,好好的一个DX家族,现在也闹分离的;这就是为什么上面出现了很多9.0的不同版本,甚至有些还说是更新版本,这里请大家注意,我主要讲下9.0C与9.0B的区别。
首先,9.0B是先与9.0C的老版本,理论上讲,后者功能更强与前者。但是由于它太先进了吧,微软居然把里面的DirectShow部分给分离出来,更可恶的也不独立成长,而是把它装到了Platform Sdk中。这之间的关系可把人头都弄大了,所以要想按以前常规的办法用DX9.0的话,建议还是装9.0B,有220多M,去官方进行下载,尽管新版本也能用,但是那个配置不是一下就能调出来的。所以我还是选择走老路。
下载安装好9.0B后,接下来有个很麻烦的事情,需要自己编译库,也就是要生成strmbasd.lib。9.0B很方便,在你安装好的路径(比如我安装在C盘):C:/DXSDK/Samples/C++/DirectShow/BaseClasses很容易找到baseclasses.dsw, 打开此工程,选择DEBUG版本或则Release版本进行编译(注意不要选择Unicode版本,选他后总会出点错)。库生成后就开始我们自己工程项目的配置问题了。
首先在在菜单栏里按(tools->Options->Directories),进行包含文件和相关库的设置:
Include文件:
C:/DXSDK/Include
C:/DXSDK/SAMPLES/C++/DIRECTSHOW/BASECLASSES
C:/DXSDK/SAMPLES/C++/COMMON/INCLUDE
Lib文件:
C:/DXSDK/Lib
C:/DXSDK/SAMPLES/C++/DIRECTSHOW/BASECLASSES/DEBUG
然后在(Probject->Setting->Linking)的Object/Library modules的框中加入刚编译通过的库strmbasd.lib 。
至此配置上几基本Ok。但要想你的程序成功跑起来,在你的工程文件,.h也好,.cpp也行,只要在用的类的开头加入以下几个包含文件:
#include <dshow.h>
#include <streams.h>
好,祝你一次性成功啊,不过第一次尝试的话,还是一步一步的来。