正文

DirectShow视频捕捉应用研究2006-01-15 14:04:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/ddtme/9655.html

分享到:

  摘要 本文将对从捕捉设备和从播放文件中进行视频捕捉涉及的有关驱动(Driver)与应用的模型和接口进行研究和分析,比较其Windows与Windows CE中的不同,从而提出在Windows CE下实现视频捕捉数据流的方法。

关键字 DirectShow,视频捕捉,驱动,Windows CE系统

  引言

  随着多媒体技术的不断发展,相应的软件与硬件层出不穷,现在与多媒体视频会议(Video Conference)、视频对话相关的软硬件正成为人们关注和谈论的热点应用。而在这些应用中无不涉及视频数据的捕捉。

  视频捕捉

  1、从工具上讲:一般从宏观上我们讨论的视频捕捉都是指的我们依赖于一定的软件和硬件快速获取和处理音/视频数据,实现照相、抓图、字幕、视频翻转/镜像等操作。

   视频捕捉硬件一般有:视频捕捉卡、摄像头(CAMERA)、摄像机或称摄影机(DV)等;

   视频捕捉软件是指相应捕捉硬件的驱动程序和实现捕捉、回放功能的应用软件。如:HyperCam,iuVCR ,WinCAM 2000 等。

  2、静态和动态视频捕捉

   静态视频捕捉成的一般为图片文件,如.BMP的文件等,其分辨率的大小可以通过程序或设备属性设定。

   动态视频捕捉的可以是.WAI等具有连续动作的视频低自定格式的文件,用一般的播放软件可以播放。

  基于DirectShow的视频捕捉过程

  1、DirectShow技术

  在一般的软件开发工具中(比如VB,VC)都可以直接调用windows系统下的MCI控制接口)函数或者媒体播放控件(WMP等),设定相关的文件名等属性就可以实现视频的捕捉或回放。随着多媒体技术的迅速发展,各种压缩算法在该领域的应用,MCI技术越来越显的力不从心,最明显的是它不支持可变比特率的压缩算法,对于处理DVD等近年出现的多种新的媒体格式已显得无能为力。随后,微软又适时推出了建立在DirectX(包含DirectDraw、DirectSound、Direct3D)之上的DirectShow技术,它也是一种API(应用程序接口),每个DirectX部件都是用户可调用的API的总和,通过它应用程序可以直接访问计算机的硬件。支持来自本地或网络的各种视频、音频压缩格式的媒体文件的解码和回放,可以从设备上捕捉多媒体流,也可以处理各种压缩算法处理的流媒体。这些格式包括:MPEG的音频和视频标准、音频和视频交互标准(AVI)、WAVE、MIDI和高级流格式ASF。

  DirectShow包含了三种标准COM组件(一般称为过滤器—Filter):Source filter、Transform filter、Renderer filter来处理流媒体数据。Filter带有输入、输出针角(pin),或二者兼而有之。Filter通过向文件读写、修改数据和显示数据到输出设备上来操作流媒体。为了完成整个任务,必须要将所有的Filter连接起来,这三种Filter组成了过滤器图表管理器(Filter graph manager),如图1所示:

图1 过滤器图表结构(Filter Graph Manager)


  从图1中可以看出,Filter graph manager是各种过滤器的集合,它是通过各Filter的输入输出"pin"顺序连接而成的,这些Filter的pin通过协商来决定它们将支持何种形式多媒体。

  2、从视频设备进行的视频捕捉

  在DirectShow的filter中,有一类Capture Filter,它一般代表的是捕捉卡等硬件设备,其实它就是DirectShow与设备的Driver之间的接口。因为Filter通过DeviceIoctl函数实现交互,使得应用程序员可以通过DirectShow的Filter直接与捕捉设备的Driver进行通信。
其模型如图2:


图2视频捕捉体系(VideoCaptureAchitecture)


  我们只需将Capture Filter加入Filter Graph中,在通过其提供的接口函数就可以捕捉我们需要的视频或音频数据。

  3、在媒体播放过程中的视频捕捉

  Sample Grabber Filter是Transform filter的一种,它提供了一些接口能够检索(retrieve)在Filter Graph中传递的数据样本(samples),从而实现对播放过程中数据流的控制。比如通过IsampleGrabber::GetCurrentBuffer就可以得到当前的图像帧,进而将其保存为文件或者显示在指定的地方。

  开发人员也可以通过编写自己的Filter来扩展DirectShow对媒体的支持功能,例如:在微软的DirectX技术中不提供MPEG2 Decoder Filter,换句话说,必须提供第三方的MPEG2 Decoder,这个“第三方的MPEG2 Decoder Filter”就是必须我们自己编写或者从别的厂商处购买;其中就包括Video/Audio Decoder Filter。有很多软件厂商就是经营这种产品的。

 

阅读(5027) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册