设计模式在网络视频监控系统设计开发中的应用
2010-11-07刘炳均谭国斌
刘炳均 谭国斌
中国人民解放军总后军事交通运输研究所车辆装备检测试验中心 300161
设计模式在网络视频监控系统设计开发中的应用
刘炳均 谭国斌
中国人民解放军总后军事交通运输研究所车辆装备检测试验中心 300161
随着视频监控系统的功能日益复杂,监控软件的开发面临着许多诸如代码冗余、开发效率低等新的问题。利用设计模式可以更加简单方便地复用成功的设计和体系结构,从而更快更好的完成系统的设计。实践证明,充分利用设计模式提高了开发的效率,增强了系统的可维护性和可扩展性。
视频监控;设计模式
网络视频监控系统是以摄像机为前端设备,以视频服务器,硬盘录像机等设备为中介,以计算机网络为信息传输平台,以计算机为终端,实现数字视频的传输、存储和播放等功能的安全防范系统。它以其直观、准确、及时和信息内容丰富而广泛应用于生产管理、保安等许多场合。
进入二十一世纪,随着传输技术、计算机、网络以及图像处理技术的飞速发展,视频监控技术也有了很大的提高。飞速发展的技术和人们的需求要求视频监控系统实现基于各种网络的点对点、一点对多点、多点对多点的实时监控、遥控摄像机、报警处理、信息管理等多种功能。这就要求网络视频监控系统具有很强的可维护性、可扩展性,对软件开发人员提出了挑战。
本文在对网络视频监控系统进行分析的基础上,针对系统开发中遇到的几个问题,提出了基于设计模式的解决方案,实现了一个具有分布监控、集中管理,任意整合、随意扩充等功能的网络视频监控系统。
1.设计模式
设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。它是面向对象设计者在实际工作中针对特定问题的经验和解决方案的总结,它通过规范和有效的形式记录这些设计经验,使人们可以更加简单方便地复用成功的设计和体系结构,设计出复用性和灵活性更好的系统。
设计模式使得软件系统的对象建模更加合理,对象间的耦合度更小,能获得更高层次的设计复用和代码复用。同时,使用设计模式可以降低软件系统设计的复杂度。将软件设计结果及其使用的设计模式同时记录,可以帮助开发人员理解这些可复用思想,提高软件系统的可理解性。
1995年Gamma等4人在《Design Patterns Elements of Reusable Object -Oriented Software》一书中介绍了3类(创建型、结构型和行为型)23种常用的设计模式。这本书的发表是设计模式发展的一个重要的里程碑式的标志性事件。
2.系统结构
网络视频监控系统分为两个部分,服务器端和客户端。其中,服务器端的主要功能有:设备管理、软件中间件管理、用户权限管理、系统配置等。客户端的主要功能有:实时监控、录像查看、报警处理、视频服务器配置等。图1所示为系统的功能结构图。
3.系统分析
根据系统的功能需求对系统进行分析,系统设计中有几个难点:
3.1 综合配置管理
在系统中,将所有的硬件设备(摄像机、硬盘录像机等)、软件中间件(流媒体服务器、流转发服务器、电视墙服务器等)、用户、方案和系统设置统称为“资源”。另外系统中还存在一种特殊的资源——“区域”。区域是一个抽象的概念,它可以包含子区域或直接包含各种硬件设备或软件中间件。根据需求,在所开发的视频监控系统中,需要更改资源的属性,并且把所有的资源整合到一个层次分明的树形结构中,进行统一配置管理。这就需要对资源类进行抽象与重组。
3.2 SDK的复杂性
系统的客户端需要实现的功能主要有:图像预览、文件下载回放、云台控制、语音对讲、监听、录像、抓拍、日志管理、系统配置等等。这些功能都是通过对具体的DVR(硬盘录像机)进行控制来实现的。
DVR厂家提供了访问DVR的SDK接口,这些接口有上千个之多。系统需要支持多个厂家的设备,而每个厂家提供的SDK又各不相同。因此,系统开发的一大困难是:系统SDK相当复杂,在程序中直接调用SDK势必导致代码的臃肿、重复,不利于系统的维护和扩展。因此,系统设计的目标是既能同时兼容多个厂家设备的SDK,又能保证DVR访问接口的统一。
3.3 报警处理要求
系统中的DVR可以产生两大类的报警信息:系统报警和异常报警。系统报警主要是指DVR的硬盘异常报警、制式异常报警、非法访问报警等;异常报警主要是指视频信号的通道移动侦测报警、DVR的报警输入端口上传的报警等。
对于不同的报警信息系统有默认的处理方式,同时系统还需要支持用户自定义的报警的处理方式。比如对于通道移动侦测报警,用户可能要求系统自动显示该通道的视频信号,同时要弹出对话框提示发生了报警,有可能还需要弹出该通道所在地点的电子地图。也就是说对于同一种报警信息,可能同时有多种不同处理方式,这些处理方式是不确定的,是可以通过用户来自定义的。这要求系统有极大的灵活性,可以随时添加或删除不同的报警处理方式。这种报警信息的处理能够代表系统中的一类问题,即对于不确定的消息的响应。
4.系统设计
在对系统分析的基础上开始进行系统设计。首先,对系统中对象进行抽象,确定系统中的类和类之间的关系,然后针对系统特点提出了基于设计模式的解决方案,很好的解决了系统设计中的难点。
4.1 资源抽象与重组
根据系统资源的种类,定义不同的资源相对应的类。主要有:区域类(C R e g i o n)、嵌入式硬盘录像机类(C E m b e d d e d D e v)、流媒体服务器(C S t r e a m S e r v e r N o d e)、用户类(CUser)、预案类(CActionPlan)、动作类(C A c t i o n)、预览组类(C B r o w s e G r o u p)、预览窗口(CBrowseWindow)等等。
要将不同资源组成一个树形的结构,就要求不同的资源之间存在父子关系。在系统设计中,使用设计模式中的Composite模式解决这一问题。
Composite模式的意图是将对象组合成树形结构以表示“部分—整体”的层次关系。Composite使得用户对单个对象和组合对象的使用具有一致性。其结构图如图2所示。
图2 Composite模式结构图
要实现树形结构,所有的资源类必须拥有父节点和子节点的集合,这是资源类之间的共性,通过提炼这个共性,抽象出一个模板类CParentClass,用这个类来描述节点间的父子关系。CParentClass的结构图如图3所示。
图3 CParentClass结构图
以CParentClass为模板,构造一个基本节点类CBaseNode,用于表示树型结构中的节点,作为Composite模式中的Component,所有的硬件、软件类节点、用户类节点、预案类节点、预览组类节点和系统配置类节点都从该类派生,都成为一个Composite。这样所有的相关类就都具有了父子关系,可以形成一个完整的清晰的树形结构。
4.2 SDK封装
面对系统SDK过于繁琐的问题,系统需要提供一个统一的接口来实现所有DVR的功能。在系统设计中,使用设计模式中的Facade模式解决了这个问题。
Facade模式的意图是为子系统中的一组接口提供一个一致的界面,它定义了一个高层接口,这个接口使得这一子系统更加容易使用。这个意图与系统的需求完全相符。
不同的厂家生产的不同型号的DVR的SDK接口并不相同,但是DVR所提供的功能却大同小异。通过功能抽象,将对DVR的基本操作封装到一个CDVR类中,这是一个虚基类,它没有具体的实现,只提供了一些功能接口供上层调用,从而对客户屏蔽了复杂的SDK。
具体不同厂家DVR功能,是通过派生CDVR类来实现的。比如希望系统支持“海康”嵌入式DVR,就从C E m b D V R类(嵌入式D V R类,从CDVR类派生)派生出了CHikEmbDVR类。在CHikEmbDVR类中,通过调用SDK实现了对海康嵌入式DVR的各种操作。这几个类的结构图如图4所示。这样就实现了一个以CDVR类为最上层接口的F a c a d e模式的子系统。
图4 DVR系列类关系图
4.3 报警功能的设计
对报警处理的要求是可以随时添加或删除不同的报警处理方式。就是说需要实现这样的功能:当某资源的报警状态发生改变时,所有需要对该报警进行响应的对象都要针对该报警信息做出相应的反应。解决这个问题,应用了Observer模式。
图5 Observer模式结构图
图6 系统报警监听处理类结构图
图7 报警监听处理顺序图
Observer模式的意图是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知,并被自动更新。Observer模式的结构图如图5所示。
在系统中建立了两个类:CDVRMsgHandler和CListener类。其中CDVRMsgHandler类用来处理所有上传的报警信息,在系统中充当了目标者(Subject)的角色,CListener类用来监听CDVRMsgHandler类发出的报警信息,在系统中充当了观察者(Observer)的角色,所有可能需要对报警信息做出响应的类都从CListener类派生,作为具体报警监听者。在系统运行时,需要监听报警的Listener只需要在CDVRMsgHandler类对象中注册,就可以监听到所有的报警信息,从而对相应的报警做出响应。具体的报警监听的类结构图如图6所示,报警产生时程序对报警的处理顺序如图7所示。
在系统中,还应用设计模式解决了许多其他的问题,比如用A b s t r a c t Factory模式解决了多种设备即插即用的问题;用Mediator模式解决了多个对象间消息传递的问题;用Adapter模式实现了CEmbeddedDev类对象与CDVR类对象的对应,从而解决了通过资源对象播放视频的问题。限于篇幅关系,具体的解决方案这里不再赘述。
5.结束语
本文以网络视频监控系统的开发为线索,讨论了设计模式在面向对象的软件设计开发中的应用。面对系统开发中遇到的各种难题,提出了各种基于设计模式解决方案。通过设计模式的应用,系统的结构更加合理,开发效率大大提高,系统的可扩展性、可维护性更强。
如今,设计模式已经在软件生产中获得了越来越广泛的应用,它对于降低软件开发成本,提高生产效率和软件的可靠性具有越来越重要的意义。
[1] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides等著;李英军等译.设计模式:可复用面向对象软件的基础[M].第一版.北京:机械工业出版社.2000.9; 20-25
[2] 文艾,刘鹏,莫国庆,周光友.视频监控系统可复用播放器框架研究[J].计算机应用研究.2008;25(增刊)∶2090-2092
10.3969/j.issn.1001-8972.2010.11.040