欢迎来到天天文库
浏览记录
ID:14005673
大小:86.50 KB
页数:34页
时间:2018-07-25
《基于delphi的directshow开发概述1》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于Delphi的DirectShow开发概述1第一部分:背景知识DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。它经过DirectX6.0中的DirectXMedia发展而来,集成了DirectX家族中的其他成员(DirectDraw、DirectSound等),可以说是一位“集大成者”。DirectShow能做些什么?DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地
2、支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的是,DirectShow提供的是一种开放式的开发环境,每个功能模块都采取COM组件方式,称为Filter,开发者也可以开发自己的功能Filter来扩展DirectShow的应用。按照功能来划分,Filter分为3类:SourceFilter,TransformFilter,RenderingFilter。前者负责获取数据,数据源可以是文件、数字摄像机等,然后将数据
3、往下传输;中间者负责数据的格式转换,比如数据流的分离与合成、编码解码等,然后把数据继续往下传输;后者负责数据的去向——给声卡、显卡进行播放或者输出到文件存储。第二部分核心技术DirectShow的开发实际就是Filter的开发,DirectShow自身提供了,下面就是Filter概述。1、DirectShow的FilterFilter一般分为下面几种类型。 (1)源过滤器(sourcefilter):源过滤器引入数据到过滤器图表中,数据来源可以是文件、网络、照相机等。不同的源过滤器处理不同类型的数据源。 (2)变换过滤器(transformfilter):变换过滤器的工作
4、是获取输入流,处理数据,并生成输出流。变换过滤器对数据的处理包括编解码、格式转换、压缩解压缩等。 (3)提交过滤器(rendererfilter):提交过滤器在过滤器图表里处于最后一级,它们接收数据并把数据提交给外设。 (4)分割过滤器(splitterfilter):分割过滤器把输入流分割成多个输出。例如,AVI分割过滤器把一个AVI格式的字节流分割成视频流和音频流。 (5)混合过滤器(muxfilter):混合过滤器把多个输入组合成一个单独的数据流。例如,AVI混合过滤器把视频流和音频流合成一个AVI格式的字节流。 过滤器的这些分类并不是绝对的,例如一个ASF读过
5、滤器(ASFReaderfilter)既是一个源过滤器又是一个分割过滤器。2、关于FilterGraphManager FilterGraphManager也是一个com对象,用来控制Filtergraph中的所有的filter,主要有以下的功能: 1)用来协调filter之间的状态改变,从而使graph中的所有的filter的状态的改变应该一致。 2)建立一个参考时钟。 3)将filter的消息通知返回给应用程序 4)提供用来建立filtergraph的方法。简单描述,Graph就是各个Filter组成的一个流程图。SourceFilter----
6、-----Sp
7、literFilter-------------(Video-pin)>-----TransFormFilter--->VideoRender
8、---------------------(Audio-pin)->----ACMWraperFilter--->DirectSoundFilter程序启动过程,先创建各个filter的com对象,然后使用FilterGraph.Addfilter加入到Graph中,然后把每个Filter按照数据流把OutPin和inpuin连接起来。最好启动FilterGraph.play即可。 Directshow是基于模块化,每个功能模块都采
9、取COM组件方式,称为Filter。Directshow提供了一系列的标准的模块可用于应用开发,开发者也可以开发自己的功能Filter来扩展Directshow的应用。下面我们用一个例子来说明如何采取Filter来播放一个AVI的视频文件。 1)首先从一个文件中读取AVI数据,形成字节流。(这个工作由源Filter完成) 2)检查AVI数据流的头格式,然后通过AVI分割Filter将视频流和音频流分开。 3)解码视频流,根据压缩格式的不同,选取不同的decoderfilters。 4)通过Ren
此文档下载收益归作者所有