DirectShow

2017-08-04 13:09 作者:电脑问题网 软件百科 浏览:187次
  DirectShow

  DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM(Component Object Model)的流媒体处理的开发包,与DirectX开发包一起发布。DirectShow使用一种叫Filter Graph的模型来管理整个数据流的处理过程,运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。这样使在多媒体数据库管理系统(MDBMS)中多媒体数据的存取变得更加方便。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等,为多媒体流的捕捉和回放提供了强有力的支持。

 外文名  DirectShow    开发代号   Quartz
 公司提供  微软    学    科  互联网

 

  简介

  DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,9.0之前与DirectX开发包一起发布,之后包含在windows SDK中。

  运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。

  历史

  ActiveMovie,开发代号 Quartz, 这个由 Geraint Davies 为微软公司设计的 DirectShow 的前身,在 Windows 3.0 时代,是作为一种对当时最流行的媒体平台 QuickTime 的回应而开发的。ActiveMovie 最早的出现是被附加在 Windows 95 上面的并且需要系统安装了 IE3.0 。它当时的使命是作为 IE 的附件播放在其窗口内的媒体文件,正如当时 QuickTime 为 Netscape 以及 IE 提供的服务那样,它的另一个功能是作为 Windows 视频技术(VFW,Video For Windows)的一个替换,特别地为在 VFW 架构中难于处理的 MPEG(移动图象专家组格式文件)文件提供辅助处理。

  在 1998 年,大致在 DirectX 5 年代的时候,ActiveMovie 被重命名为 DirectShow(反映了微软公司在那时正在努力加强“直接地”在一个通常的取名系统之下与硬件合作的技术)并且被包含为 " DirectMedia SDK" 的一部份。在 DirectX 的 7 版中,DirectShow 变成了 DirectX SDK 主要组成部分而且如同 DirectInput 等其它 DirectX APIs 一样被给予了它自己的位置。甚至之后, DirectShow 被主要用来接收来自像一个手提摄像机这样的电视输入装置的数据,而且它从文件中显示数据的能力被广泛用在 Windows Media Player 上面。 从 2005 年四月起,DirectShow 被从 DirectX SDK 移除,必须单独下载Extra包才能得以支持,之后DirectShow的文档和示例被转移到Windows SDK,DirectShow也正式成为Windows的一个组件。然而,在编译某些 DirectShow 的示例时,DirectX SDK 仍然是必需的。

  设计

  DirectShow 运行的方式通常是一个开发者创建一个 Filter Graph,把一些 Filter - 可能订制 - 加入 Filter Graph,然后播放文件,或者播放来自互联网或照相机的数据。当播放进程运行时,Filter Graph 在 Windows 注册中寻找注册了的 Filters 并且为这些 Filter 创建本地提供的 Graph 。在这之后,它将所有的 Filter 连接在一起,并且在开发者的请求下,播放/中止创造的Graph。

  为一个 mp3 文件创建的 Filter graph,由 DirectShow 自带的示例 GraphEdit 来播放。在这幅图中大的方块代表 Filter graph ,小的方块代表端口。 每个Filter表示数据处理过程的一个阶段,举例来说从一个文件或照相机读取数据,解码,转换以及绘制。filter 有若干的能被连接到其他 filter 上的连接点的Interface。Interface可能是输出或输入。根据 filter,数据被采用“拉模式”从输出端口输出,或者以“推模式”被推到另一个输入端口,并借此来传输数据。 大多数 filters 的创建使用了一组 DirectShow SDK 提供的 C++类,叫做 DirectShow BaseClass。这些为 filters 解决了许多创建,注册和连接的问题。如果要让 filter graph 能够自动的使用 filters,它们需要在一个分开的 DirectShow 项目中被登记并与 COM 一起登记。 这一个注册能被 DirectShow BaseClass处理。然而,如果应用程序手工增加 filters,他们不需要被全然登记。 不幸地,它难以修改一个正在运行中的 graph 。从头停止 graph 而产生一个新 graph 通常是比较容易的。

  功能

  在 DirectShow 中有许多抽象的播放源文件的方法,实现这些功能也是相当简单的而且不需要一个定制过的 filter 。下一步相对复杂的过程是程序开发员需要开发他(她)自己的 filter graph ,举个例子他们可能设计一个可以接受来自互联网或是硬盘文件数据的 source filter ,也许有些定制的 filter 就是开发者想要的,接下来他们需要让 DirectShow 为用户完成一个 filter Graph 并将所有 filter 连接起来,在最后开发者仅仅只用让 DirectShow 为他们生成一个可以获取文件数据的 source filter 就可以了。
  DirectShow 预先设置支持许多通常的媒体格式,如 MP3,和 Windows 媒体视频和一些比较常见的格式,比如简单的静态图像。自从在 Windows 中这些技术被许可了,对 Fraunhofer 来说就没有为专利权而付出花费的必要了,比如 MP3 执照。扩充机制允许 DirectShow 在将来可以支持出现的任何格式,举例来说,已经有对 Ogg Vorbis 文件和 AC3 文件的支持 filters ,此外还有若干其它的支持 filters 。
回到顶部