DirectShow 下载 安装 配置 播放AVI文件源码 (综合转)
VFW(Video for Windows)是Microsoft推出的关于数字视频的一个软件开发包;
DirectShow是微软公司在VFW的基础上推出的新一代基于COM的流媒体处理的开发包,在视频开发中,不论从效率还是实用性上都明显好于VFW。
著名的OpenCV由于时间太早,其视频部分就是基于VFW做的,这点可以说是OpenCV的一个瑕疵;
DirectX8.0 至 DirectX9.0b 此其间的DirectX版本集成了DirectShow,DirectX9.0c以后DirectShow被集成在微软的其它SDK开发包中。
在学习和开发中,可直接下载DirectX9.0b(大约218M),没有其它办法,从微软官方或迅雷的gougou下载DirectX9.0b都可以
第一步:安装DirectX9.0b,要分2步走,最后得到目录比如: C:/DXSDK
第二步:DirectShow日常开发中最常用到的<strmbasd.lib>此文件并没有直接给出,需要我们手动编译,方法如下:
用vc6.0(不要管你以后用什么工具,这步最好用vc6.0)打开C:/DXSDK/Samples/C++/DirectShow/BaseClasses/baseclasses.dsw
好像能直接编译通过,编译设置win32 debug(先不要管那个win32 debug unicode),最后得到文件
C:/DXSDK/Samples/C++/DirectShow/BaseClasses/Debug/strmbasd.lib
如果这步编译不过去不要急,往下看......做完第三步定能编译过去,哈哈
第三步:不要想像别的SDK一样,只把用到的.h提出来就可以了,开发和学习过程中只能配置vc目录选项以找到相应的调用文件,
配置方法:vc6.0和vc2005相同,以vc6.0为例:工具-选项-目录
include files
C:/DXSDK/Include //一定放在最上面,切记
C:/DXSDK/Samples/C++/DirectShow/BaseClasses //一定放在最上面,切记
library files
C:/DXSDK/Lib //顺序随意
C:/DXSDK/Samples/C++/DirectShow/BaseClasses/Debug //顺序随意
第四步前传:第二步的strmbasd.lib一定要存在
第四步:vc6.0使用过程
在stdafx.h文件加入以下二行代码:
#pragma comment(lib, "strmbasd.lib")
#include <Streams.h>
F7编译,如果通过,vc6.0的DirectShow环境已OK
第五步:vc2005使用过程
在stdafx.h文件加入以下二行代码:
#pragma comment(lib, "strmbasd.lib")
#include <Streams.h>
F7编译,不通过,主要有2个错误
第1个错误:error C2146: syntax error : missing ';' before identifier 'PVOID64'
转到错误文件:winnt.h找到如下两行代码:
typedef void *PVOID;
typedef void * POINTER_64 PVOID64;
在这两行代码前加上这行#define POINTER_64 __ptr64可解决//只改一处哟,
再F7编译:提示:conversion from 'LONG' to 'PVOID' of greater size,这是第2个错误,注意这次是"PVOID"非上次的'PVOID64'
这个就不能一个一个地改了,因为有很多地方。这是因为在VC6中,如果没有显示的指定返回值类型,编译器将其视为默认整形;但是vs2005不支持默认整形,解决这个问题不能修改每个没有显示指示返回值类型的函数地方,可以用wd4430来解决;具体的在vs2005项目/属性/ C++/命令行/附加选项中添加/wd4430即可。
再F7编译:通过
vc2005的DirectShow环境已OK
第六步前传:用DirectShow编写1个播放avi视频文件的程序并运行,
做准备工作如下,一定要在网上下个ffShow解码器安装后才可以;不下我也不知道行不行,反正我是下完了运行没问题
关于ffShow解码器愿意看的本文最下面有个题外话
第六步:vc6.0或vc2005在Dialog上任意放个按钮,添加如下代码,编译,运行就可以了
关于ffShow解码器的题外话----------------目前几种常见的视频格式,我也不懂,乱抄的,详细自己查...
MPEG-1 活动图像专家组制定的,常见于VCD,120 分钟视频要1.2 GB,效果不清晰
MPEG-2 则应用在DVD的制作 120 分钟4GB到8GB大小左右,目前为止最清晰的视频,清晰到硬件不支持,因此MPEG-3流产了
rmvb 这时Real Networks公司研制出rm rmvb视频格式,相对于MPEG-2,有相近的清晰度,越小的体积,并支持网络实时传送和播放;
MPEG-4 为了对抗rmvb, MPEG-4出现了, 120分钟“瘦身”到300MB左右,清晰度也很可观,并支持网络实时传送和播放;但技术是保密的
DivX 很多高手看不惯,部分破解了MPEG-4 格式,DivX出现了,还可以把源文件压缩到600MB左右,但其图象质量则比MPEG-4要高出许多
这其中的一位更高的高手拿着大家的胜利果实自己开公司赚钱啦,并收回了DivX源码。
XviD 留下来的高手实在看不过去又继续开发出XviD,这个貌似是真正开源的,目前也相当厉害
还有很多视频格式,ffShow好象就是把这些视频格式的解码器,集中打包的意思了;
转自 vc 常用代码