随笔-27  评论-6  文章-0  trackbacks-0
DirectShow:我们熟悉的 DirectX家族中的一个组件,主要针对程序员开发数字音/视频程序提供支持。
使用DirectShow可以在很短的时间内搭建自己的视频播放、捕获和编辑应用程序,不必对有关视频硬件如显卡、视频捕获设备、视频编码算法、解码算法、音/视频数据同步等复杂技术做细节的掌握。
一、DirectShow SDK
DirectX中的一个组件,DX是Microsoft为流媒体应用开发的一套基于Windows的API。
DX包括:
  1. DirectX Graphics,集成了以前的DirectDraw和Direct3D技术;
  2. DirectDraw,主要负责2D加速,以实现对显卡内存和系统内存的直接操作;
  3. DirectInput,支持输入服务(包括鼠标、键盘、游戏杆等),同时支持输出设备;
  4. DirectPlay,提供多人网络游戏的通信、组织功能;
  5. DirectSetup,提供自动安装DirectX组件的API功能;
  6. DirectMusic,支持音频的捕获、回放功能;
  7. DirectSound,提供音频捕捉、回放、音效处理、硬件加速和直接设备访问等功能;
  8. DirectShow,在Windows平台上处理各种格式的媒体文件的回放、音/视频采集、非线性编辑等高性能要求的多媒 体应用,提供了完整的解决方案;
  9. 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 阅读(1957) 评论(0)  编辑 收藏 引用 所属分类: 文件、图形与多媒体

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理