关于DirectShow SDK版本变迁说明及解决找不到streams.h文件

2/22/2017来源:ASP.NET技巧人气:1886

1.DirectShow SDK版本变迁说明

做视频聊天和视频播放器程序的时候会涉及到使用DirectShow SDK,原本DirectShow SDK是集成在DirectX中,但自从DirectX 9.0c sdk后,DirectShow SDK不再包含在DirectX SDK中,现在微软所提供的DirectX10.0及其以上版本不再包含DirectShow SDK,所以在使用DirectX10.0及其以上版本SDK开发视频相关程序的时候会存在缺少DirectShow SDK的情况。自从DirectX 9.0c sdk后,DirectShow SDK不再包含在DirectX SDK中,因为大部分游戏开发不再需要DirectShow SDK,而是以Extras的形式发布,后来集成了一部分SDK到Windows SDK中(大家也就无需再从新版本的DirectX中需要DirectShow SDK了)。也就是说后来的环境(比如vs2008、vs2010环境下)比较难配置,极有可能不稳定,产生这样那样的错误。初学者可能看到如此难搞的环境配置就望而却步了,不利于学习。最新的VS2015里面集成了DirectShow SDK便于相关DirectShow程序开发,由于微软不再提供早期版本DirectX的相关SDK导致早期版本DirectX SDK较为难找,若需要早期版本的DirectX SDK(集成了DirectShow SDK)的程序或安装好后形成的开发文件包请评论留下邮箱,看到会以邮箱的形式发送。

2.视频相关程序缺少streans.h的解决方法

读者请到http://download.csdn.net/detail/u011028345/9757666下载streams.h文件,添加头文件路径或包含到程序中即可,当添加了streams.h文件解决了找不到streams.h文件问题之后,会遇到如下三类问题具体解决方法如下:

(1)C:\PRogram Files\Microsoft Visual Studio 10\include\winnt.h : error C2146: syntax error : missing ';' before identifier 'PVOID64'

解决方法:POINTER_64是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中,但DirectXSDK自己也带了一个BASETSD.H,里面没有定义POINTER_64,从而导致出错。

    在winnt.h 的     typedef void *PVOID;     typedef void * POINTER_64 PVOID64; 代码前面加上#define POINTER_64 __ptr64即可。

(2)error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

解决方法:错误发生在Operator=(LONG);函数定义中,这是因为在VC中,如果没有显示的指定返回值类型,编译器将其视为默认整形;但是Visual Studio2010不支持默认整形,解决这个问题不能修改每个没有显示指示返回值类型的函数地方,改为 LOGN operator=(LONG);即可

(3)无法打开文件“strmbasd.lib”及其相关添加静态链接库lib问题

解决方法:将添加的相关lib改为与DirectX SDK相对应的即可,将strmbasd.lib改为strmiids.lib即可。

转载请表明出处:http://blog.csdn.net/u011028345/article/details/55670241