欢迎来到天天文库
浏览记录
ID:1355068
大小:1.75 MB
页数:218页
时间:2017-11-10
《directshow学习笔记》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1AboutDirectshow基础1.1设置dshow的开发环境如果你用VC开发环境,一定要在Setting里设置下面的东西包含头文件Dshow.h所有的dshow应用必须包含包含动态库Strmiids.lib导出所有接口的CLSID和接口IID定义。必须包含Quartz.lib1.2先演示一下dshow使用的一个例子这里暂略。1.3Direcshow概述DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。那么,DirectShow能够做些
2、什么呢?且看,DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的
3、是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。DirectShow的系统组成应用程序与DirectShow组件以及DirectShow所支持的软硬件之间的关系如图1所示。图1DirectShow系统框图1.4FilterGraph及其组成这篇文档中我想给讲述Directshow的主要组成部分,一个概括性的入门文章,对于应用开发或者directshow的开发者都有所帮助。1DirectShow的FilterDirectshow是基于模块化,每个功能模块都采取COM
4、组件方式,称为Filter。Directshow提供了一系列的标准的模块可用于应用开发,开发者也可以开发自己的功能Filter来扩展Directshow的应用。下面我们用一个例子来说明如何采取Filter来播放一个AVI的视频文件。从一个文件读取数据,形成字节流。(这个工作由源Filter完成)检查AVI数据流的头格式,然后通过AVI分割Filter将视频流和音频流分开。解码视频流,根据压缩格式的不同,选取不同的decoderfilters。重画视频图像,通过RendererFilter。将音频流送到声卡进
5、行播放,一般采用缺省的DirectSoundDeviceFilter。流程见下图。从上面的图表看,每一个filter都一个其他的一个或者两个filter相连接,连接点也是com对象,我们称为Pin。Filter通过pin将数据从一个filter传递到另一个filter中,从而可以使数据的filter的链表中流动。图中的箭头表示filter链表中的数据流的方向。在Directshow中,一个filter链表我们称为filterGraph。Filter具有三个状态,运行,停止,暂停。当一个filter运行时,它
6、就处理媒体数据流,当停止时,filter就不在处理数据,暂停状态常用来给运行状态之前curedata。DataFlowintheFilterGraph一章详细描述了这些概念,可以参考。除非特别的例外,所有Filtergraph中的filter的状态的改变都是统一的,也就说,filtegraph中的所有的filter的状态改变是一致协调的。也就是说,我们也可以用filtergraph也可以有运行,停止,暂停三种状态。Filter一般分为下面几种类型。 (1)源过滤器(sourcefilter):源过滤器引入
7、数据到过滤器图表中,数据来源可以是文件、网络、照相机等。不同的源过滤器处理不同类型的数据源。 (2)变换过滤器(transformfilter):变换过滤器的工作是获取输入流,处理数据,并生成输出流。变换过滤器对数据的处理包括编解码、格式转换、压缩解压缩等。 (3)提交过滤器(rendererfilter):提交过滤器在过滤器图表里处于最后一级,它们接收数据并把数据提交给外设。 (4)分割过滤器(splitterfilter):分割过滤器把输入流分割成多个输出。例如,AVI分割过滤器把一个AVI格式的
8、字节流分割成视频流和音频流。 (5)混合过滤器(muxfilter):混合过滤器把多个输入组合成一个单独的数据流。例如,AVI混合过滤器把视频流和音频流合成一个AVI格式的字节流。 过滤器的这些分类并不是绝对的,例如一个ASF读过滤器(ASFReaderfilter)既是一个源过滤器又是一个分割过滤器。2关于FilterGraphManagerFilterGraphManager也是一个com对象,用来控制F
此文档下载收益归作者所有