网页功能: 加入收藏 设为首页 网站搜索  
DirectShow初探
发表日期:2007-01-18作者:[转贴] 出处:  

  如果你曾经有过DirectX方面的编程经验,那么相信你已经对DirectShow有所了解.DirectX不仅是游戏编程者的一件利器,提供给他们了一个方便的接口.而且其还涉及到了视频,音频,输入,输出,网络等等的各各不分.DirectShow就是其中的一个重要的组成部分.

  DirectShow是一个为在Windows平台上运行的流媒体构建的体系结构.其对于流媒体不仅提供了高质量的存取放录和捕获,而且还支持多种不同的音乐格式.

下面列出 DirectShow 中支持的媒体格式:( 带*的表示系统中必须安装有Windows Media Format SDK, 其格式才被支持)

  Windows Media Audio (WMA)*
  Windows Media Video (WMV)*
  Advanced Systems Format (ASF)*
  Motion Picture Experts Group (MPEG)
  Audio-Video Interleaved (AVI)
  QuickTime (version 2 and lower)
  WAV
  AIFF
  AU
  SND
  MIDI

压缩格式:

  Windows Media Video*
  ISO MPEG-4 video version 1.0*
  Microsoft MPEG-4 version 3*
  Sipro Labs ACELP*
  Windows Media Audio*
  MPEG Audio Layer-3 (MP3) (decompression only)
  Digital Video (DV)
  MPEG-1
  MJPEG
  Cinepak

当然,你也可以创建自己的DirectShow组件来支持新的媒体格式和效果.

  在DirectShow中,由于结合了DirectX技术.,其可以自动检测并使用视频和音频硬件上的硬件加速,来优化流媒体的播放效果,但同时也支持没有提供硬件加速的系统.其从根本上简化了流媒体的播放,格式转化和快速捕获等过程.同时也提供对流媒体的底层的直接控制.并且可以让用户自定义其处理方式.

那么我们都可以用DirectShow做些什么呢?

  在此我们举一些很小的例子,如:

    DVD播放器
    音频视频编辑器
    AVI到ASF的转化器
    Mp3播放器

  以及一些网上流媒体的搜索器等等.这些虽然是小例子,显然还也是需要我们去学习其技术原理的,但我们也不要因前面所述似乎有些陌生的词有所畏惧,其实想要出步掌握DirectShow 技术并不是一个很难的事情,尤其是先前有过Direct X 编程经验的人.

  当然,从本质上来说, DirectShow同其它 Direct X组件一样都是基于 COM的,当然你现在如果不知道COM到底是个什么东西,也不要紧,除非你需要编写自己的 DirectShow组件,那么你就需要对COM了解更多, 来创建自己的COM对象了.

  好了,再多的就不说了,我们下面来为读者介绍一些概念:

  DirectShow中的一个基本组件叫作filter(过滤器),过滤器将输入流中的信息转化,然后产生输出流.每个fliter其实只做一些简单的操作,例如:

    读取一个文件
    从一个音频和视频设备上获取数据流
    对一种格式的文件的数据流进行解码
    将数据流送入声卡或显卡

  而设对于一个对一MPGE-1文件的数据流进行解码的fliter,其输入流是一段编码过的数据流,而输出就是一段经过解码的RGB数据流.

  而在程序中,你需要将许多fliter进行连接,这样不同filter的input stream就可以转化成另一种fliter的output stream,其中这个连接的装置叫作filter graph

  我们再用一张图表表示一个AVI文件的播放过程:

    

  你不必去控制filter graph中的每个fliter的动作,因为在DirectShow 中的提供了许多高级的组件叫在 Filter Graph Manager ,由它来控制一些底层的操作,而我们只需要其中提供的高级的API函数就可以完成这些操作.如果你需要进行一些对数据流的直接操作,你也可以提供COM接口来控制fliter,同时Filter Graph Manager 还会向程序发送消息,使我们可以相应一些特殊的事件.如数据流已经读取完毕等事件.

  一个典型的DirectShow程序需要包括以下三步:

    1. 用CoCreateInstance函数创建Filter Graph Manager实例.
    2. 用Filter Graph Manager实例来创建Filter Graph实例
    3. 对Filter Graph进行控制并对事件进行响应.

  我们再用一张图表表示上述过程:

    

  到此为止其基本的概念就这些,其实已经很少了,下面就需要读者能够仔细越读示例程序了,  希望读者能够先仔细阅读并调试一下在Direct X 9.0 SDK 中提供的DirectShow中的PlayWnd程序.

[安装目录]\samples\Multimedia\DirectShow\Players\PlayWnd

  因为程序很小,并且结构简单,也能满足初学者的基本需求,所以我们挑选了这个程序, 但首先声明,读者需要对C++编程和Window API函数十分了解,并其有一定的Windows程序的编程经验.
我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 DirectShow初探
本类热点文章
  DirectShow应用——支持Windows Media格..
  DirectShow PIN 連接教學
  游戏UI设计1
  PSD格式文件的读取
  将RGB值转换为灰度值的简单算法
  貼圖 filtering 與 MIP map 簡介
  读取万能图片以及DShow的另类用法
  TGA图像文件格式资料
  DirectShow初探
  PNG格式
  DirectShow应用——支持DVD播放
  DirectShow的中文资料之建立一个捕捉程序
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00362