欢迎来到天天文库
浏览记录
ID:15421934
大小:55.00 KB
页数:7页
时间:2018-08-03
《directshow系统初级指南》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、http://fpc0000.googlepages.com/mediafpcDirectShow系统初级指南 流媒体的处理,以其复杂性和技术性,一向广受工业界的关注。特别伴随着因特网的普及,流媒体在网络上的广泛应用,怎样使流媒体的处理变得简单而富有成效逐渐成为了焦点问题。选择一种合适的应用方案,事半功倍。此时,微软的DirectShow,给了我们一个不错的选择。 DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。目前,DirectX最新版本为8.1。 那么,DirectShow能够做些什么呢?且看,Direct
2、Show为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。 Direc
3、tShow使用一种叫FilterGraph的模型来管理整个数据流的处理过程;参与数据处理的各个功能模块叫做Filter;各个Filter在FilterGraph中按一定的顺序连接成一条“流水线”协同工作。大家可以看到,按照功能来分,Filter大致分为三类:SourceFilters、TransformFilters和RenderingFilters。SourceFilters主要负责取得数据,数据源可以是文件、因特网、或者计算机里的采集卡、数字摄像机等,然后将数据往下传输;TransformFitlers主要负责数据的格式转换、传输;RenderingFiltes主要负责数据的最终去
4、向,我们可以将数据送给声卡、显卡进行多媒体的演示,也可以输出到文件进行存储。值得注意的是,三个部分并不是都只有一个Filter去完成功能。恰恰相反,每个部分往往是有几个Fitler协同工作的。比如,TransformFilters可能包含了一个Mpeg的解码Filter、以及视频色彩空间的转换Filter、音频采样频率转换Filter等等。除了系统提供的大量Filter外,我们可以定制自己的Filter,以完成我们需要的功能。下图是一条典型的Avi文件回放FilterGraph链路: 在DirectShow系统之上,我们看到的,即是我们的应用程序(Application)。应用程序要
5、按照一定的意图建立起相应的FilterGraph,然后通过FilterGraphManager来控制整个的数据处理过程。DirectShow能在FilterGraph运行的时候接收到各种事件,并通过消息的方式发送到我们的应用程序。这样,就实现了应用程序与DirectShow系统之间的交互。下图给出了DirectShow应用程序开发的一般过程: 以上简单介绍了DirectShow的系统结构,希望大家对这个强劲的应用框架已经有了大概的认识。如果你有兴趣,可以详细研究DirectX的帮助文档。DirectShow是一个强大的开发包;另外,它是基于COM的,因此要求程序员具有COM编程的一些
6、基本知识。关于如何深入学习DirectShow应用结构以及开发自己的Filter,请参阅笔者的后续文章。笔者将从编程的角度,详细讲述来源于实际工作中的经验之谈。 从下面开始,我们要从程序员的角度,进一步深入探讨一下DirectShow的应用以及Filter的开发。 在这之前,笔者首先要特别提一下微软提供的一个Filter测试工具——GraphEdit,它的路径在DXSDKbinDXUtilsGraphEdit.exe。(如果您还没有安装DirectXSDK,请到微软的网站上去下载。)通过这个工具,我们可以很直观地看到FilterGraph的运行及处理流程,方便我们进行程序调试
7、。(如果您手边就有电脑,还等什么,马上体验一下吧:运行GraphEdit,执行File->RenderMediaFile…选择一个媒体文件;当FilterGraph构建成功后,按下工具栏的运行按钮;您就能看到刚才选择的媒体文件被回放出来了!看到了吧,写一个媒体播放器也就这么回事!) 接下去,我们开讲Filter的开发。 学习DirectShowFilter的开发,不外乎以下几种方法:看帮助文档、看示例代码和看SDK基类源代码。看帮助文档,应
此文档下载收益归作者所有