,欢迎光临!
加入收藏设为首页请您留言
您当前位置:网站首页 >> 华中地区 >> 基于过滤器开发技术在远程视频监控系统中的应用研究-上海联兵环保免费电话:400-600-5030

基于过滤器开发技术在远程视频监控系统中的应用研究-上海联兵环保免费电话:400-600-5030

2011-09-13 15:11:06 来源:中国过滤器网 浏览:1

摘要:该文介绍了过滤器开发技术以及它在远程视频监控系统中的应用。阐述了使用过滤器开发技术在远程视频监控系统中实现网络通信模块的设计思想和实现方法。实践表明,过滤器开发技术在网络通信开发方面具有很大的优势。
关键词:过滤器;视频监控;com组件
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)28-0216-02
1 引言
远程视频监控系统在各个领域有着广泛的应用,它是当今大型企业、银行、电力局等信息交流广泛的企业生产和管理的必备系统。视频监控系统在实际中具有广泛的应用范围,其核心在于视频与音频的实时采集、压缩、传输、回放与保存。传统的视频监控系统对网络视频传输多基于VFW技术,因此系统存在通用性差,可扩张性不强,维护困难等缺点。本文给出了一种基于过滤器开发技术的视频监控系统的网络传输设计方案。此方案在研究开发远程煤矿视频监控系统的过程中,采用Visual C++编程工具,运用过滤器开发技术,实现了远程视频监控系统中的网络通信问题。
2过滤器开发技术
Directshow使用模块化的体系结构,最主要的组件是过滤器(Filter),Directshow提供了很多标准过滤器,用户可以直接使用。但由于媒体格式、压缩方式、硬件属性等方面的特殊要求,用户经常需要自行开发过滤器来满足具体要求。因此就引入了过滤器开发技术。Directshow为过滤器组件开发提供了一套基类库(Base Class Library),包括过滤器基类、针脚基类和一些辅助类。基类库为过滤器组件的开发提供了一个框架,省去了复杂的底层编码工作。用户可将开发工作集中到如下二个方面:传输和处理媒体流;将过滤器封装为COM组件。
1)媒体流的传输和处理
为了传输数据,用户过滤器先要与过滤器图中其他过滤器连接起来。连接时要进行媒体格式和内存分配器的协调。过滤器之间通过针脚相连。过滤器之间媒体格式和内存分配器的协调实际上是通过针脚之间的通信来完成的。
主动连接方的过滤器的针脚首先获取自身支持的所有媒体格式,然后把其中一种格式送交给被动连接的一方。被动方的针脚进行判断:如果支持该格式,媒体格式协调成功;如果被动方不支持该格式,就通知主动方,主动方再提供1种不同的格式送交被动方,直到被动方支持被提供的格式,协调成功,否则,当主动方用完所有支持的格式,协调失败。
Directshow过滤器使用一种称作内存分配器(Allocator)的COM对象管理媒体流数据。当2个过滤器连接前,其中1个过滤器上的针脚提供1个内存分配器。另外1个过滤器上的针脚对这个内存分配器进行检测。当2个针脚都支持该内存分配器时,协调成功。如图1所示
媒体流传输开始之前,内存分配器负责创建一系列内存缓冲区。媒体流传输时,上游(upstream)过滤器填充这些缓冲区,并把它们传送给下游(Downstream)过滤器。Directshow使用一种称作媒体采样包(MediaSample)的COM对象管理单个缓冲区。通过控制媒体采样包对象,可以修改当前缓冲区中的媒体类型、时间戳等信息,也可以利用算法处理媒体数据,从而实现对媒体流的处理。
数据传送通常有两种典型的模式:推模式和拉模式。“推模式”中,由上游的过滤器主动将数据传递给下游过滤器,下游过滤器被动接收并对数据进行处理。“拉模式”中,处于链路下游的过滤器主动向上游过滤器提出传输数据请求,上游的过滤器接收到请求后向下传递数据。
拉模式常用于传送媒体文件形式的数据。这种数据源是静态的,本身不能主动把数据传送下去,而要靠后面的过滤器来“拉”。拉模式中,源过滤器的输出引脚上实现了一个IAsyncReader接口,下一级过滤器的输入引脚上建立一个线程,不断调用上一级的IAsyncReader接口来获取数据。
推模式方法,实时视频源不断产生视频帧,源过滤器的输出引脚使用专门的线程,将媒体实例不断地“推”出去。数据从源过滤器的输出引脚出来,源过滤器调用下一级过滤器输入引脚上的IMemInput::Receive方法实现数据传送。推模式常用于实时视频源(如视频采集卡等)。
2)COM组件的实现
COM组件的实现包括如下内容:用接口规定过滤器组件对外提供的功能;提供类厂,用以创建COM对象的实例;提供COM对象所在dll文件的各个辅助函数,以完成COM组件在应用程序中的载入和释放,在注册表中的注册和注销。
Directshow中的过滤器、针脚等COM对象通过接口对外提供各种功能。除了提供标准的接口之外,Directshow还提供了DE-CLARE_INTERFACE宏让用户自定义接口,从而满足用户对过滤器组件的指定要求。
COM实现机制中用类厂创建COM对象实例。Directshow提供了类厂类CClassFactory和类厂模板类CFactoryTemplate。通过将不同的类厂模板的内容填入类厂,实现不同的类厂对象,从而创建不同COM对象实例。
过滤器是dll文件格式的COM组件,需要以下函数:DllMain(载入时的入口)、DllGetClassObject(创建类厂对象)、DllCanUnload-Now(判断是否释放dll)、DllRegisterServer(在注册表中注册dll)、DllUnregisterServer(在注册表中反注册dll)。Directshow已经实现了前3个函数。后面的2个函数通常调用Directshow中的函数AmovieDllRegisterServer2()来实现,即:

3 过滤器开发技术在远程视频监控系统中的应用
笔者在研究远程视频监控系统中使用过滤器开发技术开发了网络通信模块,网络通信模块的实现流程如图2所示系统的网络通信部分的主要功能是以组播方式发送和接受网络视频流,网络通信部分的实现主要是网络传输过滤器的开发,包括网络发送过滤器和网络接收过滤器两部分。网络发送过滤器用于处理经压缩编码过滤器编码后的视频流,将数据流分块打包后发送出去,网络接收过滤器用于从网络获取媒体数据并将数据传送到下一级解码过滤器。本系统中网络过滤器的开发是以微软DirectX9.0 SDK示例为基础实现的。

4 网络通信过滤器的实现
1)网络过滤器的基本框架
Class CInputPin//定义过滤器输入引脚类由CBaseInputPin派生
Class CNetworkSend//定义一个由CBaseFilter基类派生的类
Class CNetOutputPin//定义过滤器输出引脚类由CBaseOutputPin派生
Class CNetworkReceiverFilter//定义一个由CBase Filter基类派生的类
使用的主要函数说明如下:
HRESULT CNetOutputPin::GetMediaType(IN int iPosition,OUT CMediaType*pmt);//连接时得到媒体类型
HRESULT CNetOutputPin::CheckMediaType(IN const CMediaType*pmt);//连接时检查媒体类型
HRESULTCNetOutputPin::DecideBufferSize(IN IMemAllocator*,OUT ALLOCATOR_PROPERTIES*);//指定每个采样包的大小
在具体实现中,我们要考虑所采用的视频编解码器的媒体格式的特征,在这里我采用了DivXNetworks公司的DivX5.02编解码器来实现视频图像的压缩、解压缩编码处理,基于它的媒体格式的特征,在GetMediaType函数中定义了媒体格式代码如下:
网络发送过滤器中GetMediaType函数的部分代码:
CMediaType*pmt;
pmt->SetType(&MEDIATYPE_Video);//设置媒体主类型
pmt->SetSubtype(&TIME_FORMAT_NONE);//设置媒体次类型为任意类型网络接收过滤器中GetMediaType函数的部分代码:
pmt->SetType(&MEDIATYPE_Video);//设置媒体主类型
pmt->SetSubtype(&DIVX);//设置媒体次类型为DIVX
pmt->SetFormatType(&FORMAT_VideoInfo);//设置媒体格式
pmt->SetSampleSize(pvi->bmiHeader.biSizeImage);//设置媒体采样包大小
5 结束语
本文主要讨论了过滤器开发技术在远程视频监控系统中的应用以及在网络通信中的具体实现方法。事实证明:利用过滤器开发技术可以方便高效地实现视频数据的传输,很好地解决了监控系统中通用性差、可扩展性不强的问题。笔者在研究开发煤矿安全视频监控系统中,实现了基于过滤器开发技术的远程监控系统网络通信模块,在应用中效果很好。]

 

上海联兵环保科技有限公司
地址:上海市松江区工业区茸北分区茸阳路69号
总机:021-51691929
传真:021-57784244
免费电话:400-600-5030
技术支持:13641659499
E-mail:zhanglianbing@126.com
http://www.shlbhb.com

发表评论
网名:
评论:
验证:
共有0人对本文发表评论查看所有评论(网友评论仅供表达个人看法,并不表明本站同意其观点或证实其描述)
赞助商链接
关于我们 - 联系我们 - 咨询联兵