DirectShow:我们熟悉的 DirectX家族中的一个组件,主要针对程序员开发数字音/视频程序提供支持。
使用DirectShow可以在很短的时间内搭建自己的视频播放、捕获和编辑应用程序,不必对有关视频硬件如显卡、视频捕获设备、视频编码算法、解码算法、音/视频数据同步等复杂技术做细节的掌握。
一、DirectShow SDK
DirectX中的一个组件,DX是Microsoft为流媒体应用开发的一套基于Windows的API。
DX包括:
- DirectX Graphics,集成了以前的DirectDraw和Direct3D技术;
- DirectDraw,主要负责2D加速,以实现对显卡内存和系统内存的直接操作;
- DirectInput,支持输入服务(包括鼠标、键盘、游戏杆等),同时支持输出设备;
- DirectPlay,提供多人网络游戏的通信、组织功能;
- DirectSetup,提供自动安装DirectX组件的API功能;
- DirectMusic,支持音频的捕获、回放功能;
- DirectSound,提供音频捕捉、回放、音效处理、硬件加速和直接设备访问等功能;
- DirectShow,在Windows平台上处理各种格式的媒体文件的回放、音/视频采集、非线性编辑等高性能要求的多媒 体应用,提供了完整的解决方案;
- DirectX Media Objects,DirectShow Filter的简化模型,提供更方便的媒体流数据处理方案。
DirectShow SDK从VC++开发人员的角度来看是SDK,更直接点讲就是静态(LIB)、动态链接库(DLL)。从计算机专业角度来讲是COM组件,使用DirectShow开发的应用程序是COM组件的客户程序。
使用DirectShow能够完成以下工作:
- 音/视频多媒体的捕获和预览;
- 支持多种多媒体格式ASF、MPEG、AVI、MP3、WAVE的回放;
- 集成其它DX技术,增强音/视频硬件如声卡、显卡的性能;
- 视频文件的回放、非线性编辑等;
- 支持DVD、DV等设备;
- 定制自己的Filter。
DirectX SDK 9.0以后的版本DirectShow被移出了DX,另DirectX 9.0C SDK并不包含DirectShow SDK,而DX 9.0B SDK(2003 年发布) 则包含。
使用DirectShow SDK开发用户自己的应用程序需要几个静态链接库quartz.lib、 strmbasd.lib、 strmbase.lib、 strmiids.lib。中间两个lib需要用户自己编译生成,而其它两个Microsoft已经提供。
库名
|
功能说明 |
strmiids.lib |
定义了DirectShow标准的输出类标识(CLSID)和接口标识(IID) |
strmbasd.lib |
流媒体开发用到的库,Debug、Debug_Unicode版本 |
strmbase.lib |
流媒体开发用到的库,Release、Release_Unicode版本 |
quartz.lib |
定义了导出函数AMGetErrorText |
winmm.lib |
使用Windows多媒体编程用到的库 |
DirectShow SDK系统框图
源过滤器主要负责从文件、网络或各种WDM/VFW驱动模式的视频捕获设备、数字照相机DC、数字摄像机DV等获取数据
变换过滤器主要负责数据格式的转换,例如我们常说的音/视频编/解码、数据流(音频和视频)的分离或合成、特定的处理如图像增强、滤波等
提交过滤器主要负责数据的最终流向,送到显卡显示或声卡播放,把处理结束的最后结果存储到文件当中去
基于DirectShow SDK开发的应用程序通过“命令”(command)和“事件”(event)来与DirectShow通信。用户调用DirectShow的函数对DirectShow发命令如打开文件、枚举系统设备、采集音/视频、回放数据等,DirectShow根据设备和系统的状态以事件的方式通知应用程序。
posted on 2010-08-29 01:45
CrazyNerd 阅读(2009)
评论(0) 编辑 收藏 引用 所属分类:
文件、图形与多媒体