网络监控视频数据的采集与压缩

2010-09-04 06:08勇,彭
关键词:枚举过滤器图表

李 勇,彭 宏

(浙江工业大学通信与信息系统系,浙江杭州310023)

0 引 言

近年来,计算机网络和多媒体技术快速发展,它们已经被广泛应用于数字监控、可视电话、远程教育和医疗等诸多工程领域。而在这些领域中最首要的问题是实时视频信息的采集与压缩,同时,它们也是多媒体开发应用的关键前提。目前国际上通用的视频采集设备都选用了比较先进的WDM采集卡,它将一个视频流数字化,然后存储于存储介质上或通过网络发送,然后使用MPEG-4压缩方法将视频数据进行压缩,取得了一定的效果[1]。国内由于网络发展的滞后,许多传统的视频采集和压缩技术存在诸多的局限性,无法很好地应用于当前的网络视频监控系统[2]。针对这一现状,本文提出了一个基于DirectShow技术和H.264技术的视频采集与压缩方案。DirectShow技术与硬件无关,它以组件对象模型为基础,使用简单,易于维护,具有良好的可扩展性,在实际应用中取得了满意的效果。

1 Direct Show系统结构

DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM的流媒体处理的开发包,与DirectX开发包一起发布。DirectShow为多媒体流的捕捉和回放提供了强有力的支持。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放、视频的非线性编辑以及与数字摄像机的数据交换。运用DirectShow,可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中[3]。这样使在多媒体数据库管理系统中多媒体数据的存取变得更加方便。

DirectShow使用模块化的架构,如图l所示,系统中参与各功能的数据处理模块即COM组件叫做过滤器(Filter)。由过滤器图表(Filter Graph)的模型进行管理,各个Filter在Filter Graph中按一定的顺序连接成一条“流水线”协同工作。按照功能,过滤器大致分为3类:源过滤器(Source Filter)、变换过滤器(Transform Filter)和渲染过滤器(Rendering Filter),源过滤器是主要负责从外部设备获取原始数据并作简单处理,再将数据往下一级过滤器送。视频采集系统就是利用源过滤器从硬件设备采集视频数据;变换过滤器是整个过滤器图的核心,负责数据格式的转换、传输;渲染过滤器主要负责数据的最终去向,将经过处理的数据流提交给外部没备,这里说的外部设备包括文件系统、显示卡、声卡、网卡等[4]。

图1 DirectShow系统结构图

2 视频采集系统

视频采集系统的整体框架如图2所示,大致分为软件和硬件两部分。

软件部分处于用户模式,主要包括源过滤器、转换过滤器和渲染过滤器3部分。DirectShow的基本原理是多媒体数据在过滤器图表中流动,通过过滤器图表中各过滤器实现在功能,最终实现多媒体数据在渲染过滤器中的显示和回放。

硬件部分处于内核模式,主要包括视频采集摄像头和视频显卡设备。摄像头支持WMD和VFW驱动模型,DirectShow使用WDM Video Capture Filter支持WDM卡,选择视频输入端口,通过COM接口LAMCrossbar、LAMStreamConfig和LAMVideoProcAmmp来实现对采集输出图像格式、对比度.亮度、色调、饱和度等参数进行设置[5]。

图2 视频采集系统框图

创建接口变量:

IGraphBuilder*pGraph;//过滤图表管理器

IBaseFilter*pCap;//Video Capture Filter

IBaseFilter*pSmartTee;//Smart Tee Filter

IBaseFilter*pRender;//Video Renderer

FilterIMediaControl*pControl;//用户命令接口,控制过滤器图表

IMediaEvent*pEvent;过滤器图表事件接口

下面通过系统枚举来创建采集filter,关键代码为:

hr=CoCreateInstance(CLSID_SystemDeviceEnum,NULL,CLSCTX_INPROC_SERVER,IID_ICreateDevEnum,(LPVOID*)&pDevEnum);

//创建系统枚举COM对象

hr=pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,&pEnum,0);

//指定枚举类型目录,获得IEnumMoniker接口

if(hr==S_OK)

{IMoniker*pMoniker=NULL;}

if(pEnum->Next(1,&pMoniker,NULL)==S_OK)

//假设系统中只有—个采集设备,故枚举到的第一个设备就是符合我们要求的采集设备

{hr=pMoniker->BindToObject(0,0,IID_IBaseFilter,(void**)&m_pCapture);}

//创建采集Filter

枚举到采集设备后,将其加入到Filter Graph中去。代码如下:hr=m_pIGraphBuilder->AddFilter(m_pCapture,L”CaptureFilter”);

通过用户命令接口,可以完成开始、暂停、停止视频的采集。

pControl->Run();

pControl->Stop();

因此,相比于传统的视频监控系统中使用VFW实现视频数据的采集,本系统采用DirectShow中的WDM方式实现视频的捕捉,解决了VFW需手工操作原始数据而容易造成错误的弊端,直接把采集的视频流从采集设备送到显示设备,减少了到用户模式的切换时间,保证了视频图像质量的连续性和实时性。

3 视频压缩

如果采集到的视频数据不经过压缩而直接保存,那么最后的尺寸将是很大的。所以通常应该先对视频内容进行压缩,然后再保存到文件中去。采用H.264视频编码标准对数据进行压缩,H.264软件包括encoder编码和decoder解码两个程序。将采集到的视频数据传输到H.264编码器进行编码,当数据到达解码器时,数据就是在解码器中完成数据的压缩,最后再把数据流传给客户端。H.264编码器算法结构的主要框架为首先通过int32_t T264_encode(T264_t*t,uints_t*sre,uints_t*dst,int32_tdst_size)函数进入编码程序,然后调用函数encode_one_frame()进行视频序列中每一帧的编码;接着调用函数H264_encode_frame()对每一帧中的每一个象素进行编码;并判断每次编完码后的返回值,返回值可以为EOS、SOP和SOS,分别表示当前帧是一个视频序列的结束帧、一幅图像的开始和一个视频序列的开始。当判断到该帧是一个序列的结束帧时,说明解码结束;不是EOS的话,则循环解码,直到解码结束为止。这个循环是算法的主循环流程[6]。流程图如图3所示:

因此,相比于传统视频监控系统中的视频压缩方式,本系统中采用的H.264压缩技术在压缩效率上明显高很多。比如在同等视频质量的压缩下,H.264的压缩比是MPEG2的两倍,是MPEG4的1.5倍。另外,H.264还具有很好的IP和无线网络信道的适应性,因此在数字视频通信和存储领域得到越来越广泛地应用。

图3 H.264编码流程

4 结束语

DirectShow技术和H.264技术在视频监控数据的采集与压缩中的应用证明,这些新技术的应用使该监控系统相比于传统的视频监控系统在图像质量、压缩效率、网络适应性等方面有了很大的提高,取得了良好的效果。

[1]蔡安妮,孙景鳌.多媒体通信技术基础[M].北京:电子工业出版社,2001:12.

[2]Rogerson D.COM技术内幕——微软组件对象模型[M].北京:清华大学出版社,1999:15.

[3]陆其明.DirectShow开发指南[M].北京:清华大学出版社,2003:23-24.

[4]潘爱民.COM原理和应用[M].北京:清华大学出版社,1999:62.

[5]Microsoft Corporation.MSDN[EB/OL].http://msdn.microsoft.com/library/default.asp,2004-06-24.

[6]Microsoft Corporation.MicrosoftDirectX9.0 SDK Document[M].Redmond :Microsoft Corporation,2003:50-51.

猜你喜欢
枚举过滤器图表
基于理解性教学的信息技术教学案例研究
一种高效的概率图上Top-K极大团枚举算法
更 正
声音过滤器
双周图表
双周图表
双周图表
图表
基于太阳影子定位枚举法模型的研究
基于LOGO!的空气过滤器自洁控制系统