收藏 分享(赏)

DirectShow个人心得与见解.doc

上传人:fmgc7290 文档编号:6369121 上传时间:2019-04-09 格式:DOC 页数:8 大小:35.50KB
下载 相关 举报
DirectShow个人心得与见解.doc_第1页
第1页 / 共8页
DirectShow个人心得与见解.doc_第2页
第2页 / 共8页
DirectShow个人心得与见解.doc_第3页
第3页 / 共8页
DirectShow个人心得与见解.doc_第4页
第4页 / 共8页
DirectShow个人心得与见解.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、DirectShow 个人心得与见解1、DirectX 是什么DirectX(简称:DX)是微软推出的一套基于 Windows 系统的多媒体应用程式接口 APIs 函式。在开发中,DX 分为两个部分,一个是运行库,通过 DX 编译出来的程式必须要有运行库的支持,另外一个是开发库,也就是常说的 SDK,这部分是在编译 DX 程序中是必需的。DirectX 是一种图形应用程序接口(API) ,简单的说它是一个辅助软件,一个提高系统性能的加速软件,微软创建开发的。他的意思不难理解,Direct 是直接的意思,X 是很多东西,加在一起就是一组具有共性的东西,这个共性就是直接。微软定义它为“硬件设备无关

2、性” 。DirectX 是微软开发的图形及媒体加速接口,只有安装了它,系统中软件才能比较直接的利用硬件加速资源(高速访问硬件) ,目前该软件最高版本为 9.0c 在 Windows 操作系统的体系构架中,在内核与硬件之间有一层抽象层,专门对硬件进行屏蔽抽象,所以用户不再被允许对硬件进行直接访问。这样做以后,大大地提高了操作系统的抗破坏性和抗干扰性,但这样以来,使硬件操作的效率大打折扣,许多新硬件的新特性无法直接使用,这对多媒体和游戏的发展显然是一种障碍。DirectX 是微软公司提供的一套优秀的应用程序编程接口(APIs),用于联系应用程序和硬件自身,它对发展 Windows 平台下的多媒体应

3、用程序和电脑游戏起到了关键的作用。DirectX 组件包括:DirectDraw、DirectSound、DirectPlay、Direct3D、DirectInput、DirectSetup、AutoPlay 等。 总之,DirectX 的主要好处有两个:为软件开发者提供与硬件的无关性;为硬件开发提供策略。为得到最新的版本,应该从最新的 Microsoft Platform SDK 中将DirectX 安装到系统中。 可以在 http:/ MSDN 光盘中找到 platform SDK。缺省情况下,Microsoft Platform SDK 被安装到缺省驱动器根目录下的MSSDK 目录中。

4、DirectX 的头文件安装在MSSDKINCLUDE 目录中,Lib 文件安装在MSSDKLIB 目录中。Platform SDK 包含了一些非常好的 DirectX 例子和文档。早期发布的 DirectX 文档非常粗略而且有些是错误的,现在的版本已经极大地改正了这一问题。最好要熟悉这些文档。 所幸的是,不必一次就处理 DirectX 的全部功能。DirectX 是一套可以分别使用的组件。实际上,在编程概念中,DirectX 的不同部分互相没有联系。它们仅仅是具有相同的设计风格和目标:使Windows 的游戏编程变得容易。 使用 DirectX 组件的程序有什么特殊的地方吗?根本没有。使用D

5、irectX 组件的程序是基于 Win32 的程序,它们使用普通 Win32 API集,并且可以访问所有可以获得的操作系统工具。实际上,DirectX既可以用于 GUI 程序,也可以用于控制台程序。可以直接用Petzold-style SDK 编程开发程序,也可以用基本类库,如 MFC。总的说,唯一的要求是大多数 DirectX 组件在程序中需要 HWND,所以至少要有一个窗口。2、DirectX 9.0 家族的所有成员DirectX Graphics:集成了以前的 DirectDraw 和 Direct3D 技术。DirectDraw 主要负责 2D 加速,以实现对显卡内存和系统内存的直接操

6、作;Direct3D 主要提供三维绘图硬件接口,它是开发三维DirectX 游戏的基础。 DirectInput:主要支持输入服务(包括鼠标、键盘、游戏杆等) ,同时支持输出设备。DirectPlay:主要提供多人网络游戏的通信、组织功能。DirectSetup:主要提供自动安装 DirectX 组件的 API 功能。DirectMusic:主要支持 MIDI 音乐合成和播放功能。DirectSound:主要提供音频捕捉、回放、音效处理、硬件加速、直接设备访问等功能。DirectShow:为 Windows 平台上处理各种格式的媒体文件的回放、音视频采集等高性能要求的多媒体应用,提供了完整的解

7、决方案。DirectX Media Objects:DirectShow Filter 的简化模型,提供更方便的流数据处理方案。3、DirectX 的作用DirectX 软件开发包是微软公司提供的一套 Windows 操作平台上的开发高性能图形、声音、输入、输出和网络游戏的编程接口。它提供了硬件设备无关性。4、DirectShow 的由来及介绍DirectShow 是从 DirectX6.0 中的 DirectX Media 发展而来的,它集成了 DirectX 家族中其他成员(DirectDraw、DirectSound 等)的技术。DirectX Media Objects 是从 Dire

8、ctX8.1 的 DirectShow中分离出来的,成为了另一种高效率的流数据处理解决方案。Microsoft DirectShow 是一个基于 Microsoft Windows 平台的媒体流结构。它支持各种格式,包括高级流模式(ASF) 、运动图像专家组(MPEG) 、音频视频交错(AVI) 、音频动态压缩第三层(MP3)和 WAV 声音文件。它支持 Windows 驱动模式(WDM)设备的捕捉,以及早期 Widows 设备的视频。DirectShow 结合了其它的DirectX 技术。当视频和音频的硬件加速可用时,它能够自动检测并进行使用,同时也支持没有硬件加速的系统。DirectSho

9、w 媒体重放、格式转换和捕捉的任务变得简单。同时,它为需要自定义的解决方案的应用程序提供了对底层流控制结构的访问。您也可以创建自己的 DirectShow 组件,来支持新的格式或自定义效果。使用 DirectShow 的应用程序类型包括 DVD 播放器、视频编辑应用程序、AVI 到 ASF 的转换器、MP3 播放器和数字视频捕捉应用程序。DirectShow 是基于组件对象模型(COM)的。要做一个DirectShow 的应用程序,您必须了解 COM 客户端编程。对于大多数应用程序,您不需要实现您自己的 COM 对象。DirectShow 提供了您所需要的组件。 (如果您想写自己的组件扩展 D

10、irectShow,则必须以 COM 对象的方式来实现。 )5、程序开发包的选择请问在 Mirosoft DirectX 主页上的下载连接有如下:它们有什么区别:l DirectX 9.0 SDK Update - (April 2005)l DirectX 9.0 SDK Update - (April 2005) Symbol Filesl DirectX 9.0c Redistributable for Software Developers - (April 2005)l DirectX 9.0c End-User Runtime-l DirectX 9.0 SDK Update -

11、(April 2005) - 就是通常说的DXSDKl DirectX 9.0 SDK Update - (April 2005) Symbol Files 调试时用的符号文件l DirectX 9.0c Redistributable for Software Developers - (April 2005) 能够随你的程序一起发行的部分l DirectX 9.0c End-User Runtime 普通用户安装的 DX6、如何把 DirectX 关联到 VC 中?我们要进行 DirectX 程序的编译就必须要有 DirectX SDK 库文件,此文件可以到微软或者本站获取,然后通过 VC

12、 设置将其关联。下面说明了在 VC6 和 VS.Net 下的安装方法。VC6(英文版):选择菜单 Tools-Options,打开 Options 对话框,选择 Directions 标签页,选择 Include files 项,在里面添加DirectX 头文件的文件夹路径目录,同样,在 Library files 项中添加 DirectX 头文件的文件夹路径目录。VS.Net(中文版):选择菜单“工具-选项“,打开选项对话框,打开 Projects 标签页,分别选择“包含文件“和“库文件“进行相应的路径添加即可。注:VC 在进行编译时,会根据排列顺序来进行库文件选取,假设有两个相同名字的库,

13、VC 会优先使用排列在前面的库文件。DirectShow 应用程序至少连接库文件 Strmiids.lib 和Quartz.lib。前者定义了 SirectShow 标准的 CLSID 和 IID,后者定义了导出函数 AMGetErrorText(如果应用程序中没有使用到这个函数,也可以不连接这个库) 。DirectShow 应用程序都应该包含 Dshow.h 文件,但常常用Streams.h 文件来代替它。如果包含了 Streams.h,则一般库文件还要连接 strmbasd.lib、uuid.lib 和 winmm.lib。7、DirectShow 开发环境的配置(1)使用 VC 向导生成

14、一个具体项目,如 Win32 Dynamic-Link;(2)包含头文件 streams.h;(3)在 VC 的菜单中选择 Project|Settings|C/C+,在弹出的对话框中的 Category 中选择 Code generation,然后在 Calling convention 中选择_stdcall;(4)使用多线程语言运行时库,即在 VC 的菜单中选择Project|Settings|C/C+,在弹出的对话框中的 Category 中选择Code generation,然后在 Use run-time library 中,Debug 版选择 Debug Multithreade

15、d,Release 版选择 Multithreaded。(5)配置必要的链接库文件,即在 VC 的菜单中选择Project|Settings|Link,在弹出的对话框中的 Category 中选择General,然后在 Object/library modules 中输入如下代码:Debug 版本 strmbasd.lib, msvcrtd.lib, winmm.libRelease 版本 strmbase.lib, msvcrt.lib, winmm.lib并且选中 Ignore all default libraries。DirectShow SDK 建议,DirectShow 应用程序应

16、该至少连接库文件strmiids.lib 和 quartz.lib。前者定义了 DirectShow 标准的CLSID 和 IID,后者定义了导出函数 AMGetErrorText(如果应用程序中没有使用到这个函数,也可以不连接这个库) 。如果程序里包含了头文件 streams.h,则一般库文件还要连接strmbasd.lib、uuid.lib、winmm.lib。(6)将 DirectX SDK 的 Include 和 Lib 目录配置到 VC 的系统目录中去,并且放在标准的 VC 目录之前,以保证编译器能够拿到最新版本的源文件。选择 Tools|Options|Directories,在弹

17、出的对话框中的 Show directories for 中选择 Include files,配置如下(假设 DirectX SDK 安装在 D:DXSDK 目录下,VC 安装在 C:Program Files 下):D:DXSDKIncludeD:DXSDKSAMPLESC+DIRECTSHOWBASECLASSESD:DXSDKSAMPLESC+COMMONINCLUDEC:Program FilesMicrosoft Visual StudioVC98INCLUDEC:Program FilesMicrosoft Visual StudioVC98MFCINCLUDEC:Program

18、FilesMicrosoft Visual StudioVC98ATLINCLUDE再在 Show directories for 中选择 Library files,配置如下:D:DXSDKLibD:DXSDKSAMPLESC+DIRECTSHOWBASECLASSESDEBUGD:DXSDKSAMPLESC+DIRECTSHOWBASECLASSESRELEASEC:PROGRAM FILESMICROSOFT SDKLIBC:Program FilesMicrosoft Visual StudioVC98LIBC:Program FilesMicrosoft Visual StudioV

19、C98MFCLIB(7)因为 DirectShow 应用程序是一种 COM 客户程序,因此在调用任何 COM 函数之前调用 CoInitialize() (或 CoInitializeEx)函数进行 COM 库的初始化(一般是在应用程序启动的时候调用一次) ,在结束 COM 库使用时调用 CoUninitialize()函数进行反初始化(一般是在应用程序退出前调用一次) 。8、VC 编译 DX 程序出现“无法解析的外部符号“是怎么回事?这个错误经常出现在初学者要进行编译 DirectX 程序的时候,主要是因为没有将 DX 的库文件引用到工程中,这里需要注意,我们将DX SDK 的路径设置到 V

20、C 后,并不代表我们已设置好了 DX SDK,在我们的 DX 工程中,我们还需要进行相应的设置操作,把我们所需要的库文件(DirectX SDK Library)加入到我们的工程中,要设置这个库文件有两个方法,一个是在你工程的编译选项中进行添加,另外一种可以通过代码的方法来添加(推荐) 。命令行:#pragma comment( lib,“xxx.lib“ )这个是 VC 的编译预处理指令,将其加在代码中即可。例如:#pragma comment( lib,“ddraw.lib“ ) 这句的意思是将ddraw.lib 库加入到工程中进行编译。注:此命令行不需要加分号(“;” ) 。9、Dire

21、ctShow SDK 基类库在 DirectShow SDK 基类库中,除了 Filter 和 Pin 类外,还有很多工具类。有了这些类的支持,我们开发 Filter 组件或者DirectShow 应用程序会更加轻松。这些类主要包括:CPullPin、COutputQueue、CSourceSeeking、CEnumPins、CEnumMedieTypes、CMemAllocator、CMediaSample、CBaseReferenceClock、CMediaType、CBaseProperyPage 等。10、DirectShow 的 COM 编程基础DirectX 采用了 COM 标准,

22、而 DirectShow 是一套完全基于 COM 的应用系统。DirectShow 应用程序实际上是一种 COM 组件的客户程序,只是 COM组件的“使用”问题。这些问题包括如何创建 COM 组件、如何得到组件对象上的解风口以及调用接口方法、如何管理组件对象(即需要熟悉 COM 的引用计数机制)等。而对于 Filter 开发人员来说,需要掌握的 COM 知识就要多一点。因为 Filter 本身是一种 COM 组件,开发 Filter 牵涉到了 COM 组件的“实现”问题。COM 本身只是一种规范,而不是实现。但是当使用 C+来实现时,COM 组件就是一个 C+类,而接口都是纯虚类。COM 规范

23、规定,任何组件或接口都必须从 IUnknown 接口中继承而来,每个组件都必须实现一个与支相对应的类工厂(Class Factory) ,类工厂也是一个COM 组件,他实现了 IClassFactory 接口。在 IClassFactory 的接口函数 CreateInstance 中,才能使用 new 操作生成一个与之对应的COM 组件类对象实例。COM 组件有 3 种类型:进程内组件、本地进程组件和远程组件。Filter 一般是一种进程内组件,以 DLL 的形式提供服务。每个 COM 组件都使用一个 GUID 来唯一标识。当创建一个 COM 组件时,总是首先通过这个 GUID 调用 CoG

24、etClassObject 来获得创建这个组件对象的类工厂。然后调用类工厂的接口方法IClassFactory:CreateInstance,就能真正地创建 GUID 标示的组件对象了。一个典型的自注册 COM 组件 DLL 所必需的 5 个函数如下:l DllMain:DLL 的入口函数(DirectShow 实现的是DllEntryPoint) ;l DllGetClassObject:用于获得类工厂指针;l DllCanUnloadNow:系统空闲时会调用这个函数,以确定是否可以卸载 DLL;l DllRegisterServer:将 COM 组件注册到注册表中;l DllUnregisterServer:删除注册表中 COM 组件的注册信息。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 工作总结

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报