1 / 26
文档名称:

用DirectShow实现视频捕捉.ppt

格式:ppt   页数:26页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

用DirectShow实现视频捕捉.ppt

上传人:管理资源吧 2011/8/3 文件大小:0 KB

下载得到文件列表

用DirectShow实现视频捕捉.ppt

文档介绍

文档介绍:用DirectShow实现视频捕捉
内容
1 DirectShow的介绍
2 Filter概述以及连接
3 视频捕捉的整体框架与思路
4 视频捕捉的具体实现
5 关于MJPEG
6 其他
1 DirectShow的介绍
DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。
那么,DirectShow能够做些什么呢?且看,DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。
1 DirectShow的介绍
1、 DirectShow的体系结构如图1所示。
DirectShow位于应用层中。它使用一种叫Filter Graph的模型来管理整个数据流的处理过程;参与数据处理的各个功能模块叫Filter;各个Filter 在Filter Graph中按一定的顺序连接成一条“流水线”协同工作。按照功能来分,Filter大致分为三类:Source Filters、Transform Filters和Rendering Filters。Source Filters主要负责取得数据,数据源可以是文件、因特网、或者计算机里的采集卡、数字摄像机等,然后将数据往下传输;Transform Fitlers主要负责数据的格式转换、传输;Rendering Filtes主要负责数据的最终去向,我们可以将数据送给声卡、显卡进行多媒体的演示,也可以输出到文件进行存储。
1 DirectShow的介绍
1 DirectShow的介绍
在DirectShow系统之上,我们看到的,即是我们的应用程序(Application)。应用程序要按照一定的意图建立起相应的Filter Graph,然后通过Filter Graph Manager来控制整个的数据处理过程。DirectShow能在Filter Graph运行的时候接收到各种事件,并通过消息的方式发送到我们的应用程序。这样,就实现了应用程序DirectShow系统之间的交互。
2 Filter概述以及连接
过滤器(Filter)是DirectShow中最基本的概念。DirectShow是通过Filter Graph来管理Filter的。Filter Graph是Filter的“容器”,而Filter是Filter Graph中的最小功能模块。组件,对于每个Filter,都有其自己的Pin,对象。Filter通过Pin来进行他们之间的连接。Pin分为两种:输出Pin和输入Pin。输出的Pin把Filter处理后的数据传送到Filter的外部,而输入Pin则是把Filter外部的数据接收到Filter中,以便Filter对这些数据进行处理。对于三种类型的Filter(Source Filter,Transform Filter,Rendering Filter)的连接图如下:
2 Filter概述以及连接
3 视频捕捉的整体框架与思路
流程图如下:
3 视频捕捉的整体框架与思路
1、建立Capture Filter,这个Filter很重要,它代表的是捕捉卡等硬件设备。其实它就是Directshow与设备的Driver之间的接口。因为Filter通过Deviceloctl函数实现交互,使得应用程序员可以通过Directshow的Filter直接与捕捉设备的Dirver进行通信。Capture Filter的创建也不象其他Filter一样使用CoCreateInstance就可以,而是先创建一个系统设备(System Device Enumerator)枚举器,从中选择代表Capture设备的Capture Filter;然后与添加别的Filter一样调用IFilterGraph::AddFilter就可以将Capture Filter加入Filter Graph。