流媒体的处理,以其复杂性和技术性,一向广受工业界的关注。特别伴随着因特网的普及,流媒体在网络上的广泛应用,怎样使流媒体的处理变得简单而富有成效逐渐成为了焦点问题。选择一种合适的应用方案,事半功倍。此时,微软的directshow,给了我们一个不错的选择。
directshow是微软公司提供的一套在windows平台上进行流媒体处理的开发包,与directx开发包一起发布。目前,directx最新版本为8.1。
那么,directshow能够做些什么呢?且看,directshow为多媒体流的捕捉和回放提供了强有力的支持。运用directshow,我们可以很方便地从支持wdm驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括asf、mpeg、avi、dv、mp3、wave等等,使得多媒体数据的回放变得轻而易举。另外,directshow还集成了directx其它部分(比如directdraw、directsound)的技术,直接支持dvd的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的是,directshow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。
接下去,我们需要对directshow系统有个整体的印象。参见以下directshow的系统示意图:
图中央最大的一块即是directshow系统。directshow使用一种叫filter graph的模型来管理整个数据流的处理过程;参与数据处理的各个功能模块叫做filter;各个filter在filter graph中按一定的顺序连接成一条“流水线”协同工作。大家可以看到,按照功能来分,filter大致分为三类:source filters、transform filters和rendering filters。source filters主要负责取得数据,数据源可以是文件、因特网、或者计算机里的采集卡、数字摄像机等,然后将数据往下传输;transform fitlers主要负责数据的格式转换、传输;rendering filtes主要负责数据的最终去向,我们可以将数据送给声卡、显卡进行多媒体的演示,也可以输出到文件进行存储。值得注意的是,三个部分并不是都只有一个filter去完成功能。恰恰相反,每个部分往往是有几个fitler协同工作的。比如,transform filters可能包含了一个mpeg的解码filter、以及视频色彩空间的转换filter、音频采样频率转换filter等等。除了系统提供的大量filter外,我们可以定制自己的filter,以完成我们需要的功能。下图是一条典型的avi文件回放filter graph链路:
在directshow系统之上,我们看到的,即是我们的应用程序(application)。应用程序要按照一定的意图建立起相应的filter graph,然后通过filter graph manager来控制整个的数据处理过程。directshow能在filter graph运行的时候接收到各种事件,并通过消息的方式发送到我们的应用程序。这样,就实现了应用程序与directshow系统之间的交互。下图给出了directshow应用程序开发的一般过程:
以上简单介绍了directshow的系统结构,希望大家对这个强劲的应用框架已经有了大概的认识。如果你有兴趣,可以详细研究directx的帮助文档。directshow是一个强大的开发包;另外,它是基于com的,因此要求程序员具有com编程的一些基本知识。关于如何深入学习directshow应用结构以及开发自己的filter,请参阅笔者的后续文章。笔者将从编程的角度,详细讲述来源于实际工作中的经验之谈。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器