郝天鹿
(唐山学院 计算中心,河北 唐山063000)
视频监控是安全防范系统的重要组成部分,它包括前端摄像机、传输线缆、视频监控平台。视频监控系统以直观性、实时性和生动性等特点而被广泛应用于多种场合,是一种防范能力较强的综合系统。近年来,随着计算机通讯技术、网络传输技术和图形图像处理技术的飞速发展,视频监控技术也有了长足的发展[1]。
但是,由于 DVR(Digital Video Recorder,数字视频录像机,也称硬盘录像机)视频输入端口的限制和受地理位置的局限,并不能集中、统一地管理这些设备,导致使用者要记录多个DVR的访问地址,即 URL(Uniform Resource Locator,统一资源定位符),以及相应的账号和密码。为了解决上述问题,本文将结合我院3个校区的微机实验室的视频监控设备运行情况,介绍如何对这些设备进行统一管理,以提供准确的监控视频。
微机实验室视频监控系统的拓扑结构如图1所示。该系统采用海康公司8000系列的DVR和DS-2CD6233F-SDI型号的数字摄像机。若要将3个校区的微机实验室的视频监控进行统一管理,那么实验室里的7个DVR就必须通过校园网络进行连接。
图1 微机实验室视频监控系统拓扑结构
软件系统体系结构分为两种情况;一种是C/S(Client/Server,即客户机/服务器)结构,通过将任务合理分配到Client端和Server端,降低了Server端的资源开销和Client端与Server端之间的通讯开销。Client端需要安装客户端软件才可进行管理操作,大部分程序主要在客户端上,而服务器端主要提供数据管理、数据共享、数据及系统维护和并发控制等,客户端程序主要完成用户的具体业务[2]。另外一种是B/S(Browser/Server,即浏览器/服务器)结构,用户界面完全通过系统网页浏览器来实现,应用程序基本上都在服务器端。由于客户端没有程序,应用程序的升级和维护都可以在服务器端完成,来弥补客户端升级、维护不便等方面的不足。由于客户端使用浏览器,使得用户界面“丰富多彩”,但数据的打印输出等功能受到了限制。为了解决这个问题,可以单独设计成ActiveX控件,或者采用第三方插件来弥补这个缺陷。
为了统一管理3个校区的微机实验室的摄像机,并且记录这些摄像机的基本信息,提供数据共享,根据海康公司官网提供的二次开发接口,本系统将采用C/S系统结构,它可以降低服务器资源的开销,使实时视频数据可以在客户端计算机上流畅地显示。
本系统采用Sql Server 2005数据管理系统,它是微软公司推出的一款数据库管理平台,提供了企业级的数据管理功能。Sql Server 2005数据库引擎为关系型数据和机构型数据提供了安全可靠的存储功能,可以为庞大、复杂的应用程序提供安全、准确、快速的数据管理功能。
根据软件系统的需求,一是管理微机室视频摄像机的信息,二是为了管理登录用户的信息,所以只需设计两个关系型的数据库表即可,如图2和图3所示。
图2 摄像机信息管理表
图3 用户登录管理表
uniqueidentifier数据类型可存储一个128位的二进制值数,其作用与GUID(全球唯一标识符)的功能一样。GUID是全球唯一的二进制数,它是根据网卡和CPU时钟而随机生成的一个二进制数,它保证世界上的任何两台计算机都不会生成重复的GUID值。GUID主要用于Windows系统中,经常用于应用程序的产品号、注册表键值、接口标识和数据库等方面。
用户登录表中登录密码采用MD5的加密方式。MD5是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护,它将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。
根据摄像机信息管理表的结构和设计用户界面,对摄像机的基本信息进行管理,主要包括:设备所在位置,设备名称,DVR的品牌,DVR的型号,DVR的IP地址或 URL,DVR的端口,登录DVR的用户名,登录DVR的密码,通道号,是否是URL标识。
若要使用DVR里固有的web程序来查看某一微机实验室的实时监控视频,就必须知道它连接在哪个DVR上的哪个通道上,并且还要知道登录该DVR时的URL、用户名和密码。用户只能访问连接到该DVR上的摄像机的实时监控视频,并不能跨越到其它的DVR上来访问其它的摄像机的监控视频。由此可见,设计一套对这些摄像机集中统一管理的系统是十分必要的。摄像机管理的主要功能包括:添加摄像机信息,修改摄像机信息,删除摄像机信息。运行效果如图4所示。
图4 摄像机管理运行效果
系统摄像机管理模块主要是通过Treeview(树状结构控件)分层次展示的,在程序加载时,从摄像机信息管理表中读取信息,动态生成树状结构。树状结构控件的优点是可以展开和折叠、显示或隐藏其中的节点和具有分层目录结构的特点[3]。
实时监控视频的获取,主要是通过海康公司提供的DLL(Dynamic Link Library,动态链接库)来实现的。此 DLL是基于VC++进行编写的,它是应用程序与DVR之间进行连接、通信和互操作的通道[4],在相应的DLL中提供了一系列的有关操作DVR的操作,比如实时预览、录像文件回放、下载、锁定和备份、实时抓屏等,如要实现其相应的功能,只需按照规定的流程调用这些函数。
本系统采用Delphi语言进行开发设计,它不能直接调用海康公司所提供的DLL中的函数,所以还需要在程序中对这些函数重新封装,以供Delphi程序使用。
获取实时监控视频的流程如图5所示。根据用户点击的节点(摄像机),在数据库中查询出该摄像机属于哪个DVR,连接在哪个通道,该DVR登录时的用户名、密码和端口号,然后调用封装后的函数,最后把实时监控视频显示在应用程序的窗体中。
图5 获取实时监控视频流程图
2.4.1 设备初始化
调用其它函数的前提,在程序中的定义为:
function NET_DVR_Init:BOOL;stdcall;external'HCNetSDK.dll';
stdcall要与原DLL中的函数的定义格式相同,external指明调用的DLL路径与文件名,本系统主要采用了静态调用的方式。
2.4.2 用户注册设备
向设备注册用户,在程序中的定义为:
function NET_DVR_Login_V30(sDVRIP:PAnsiChar;wDVRPort:Word;sUserName:PAnsiChar;sPassword:PAnsiChar;lpDeviceInfo:LPNET_DVR_DEVICEINFO_V30):Longint;stdcall;external'HCNetSDK.dll'
sDVRIP:DVR的IP地址,wDVRPort:访问DVR端口:sUserName:用户的登录名;sPassword:用户的登录密码;lp-DeviceInfo:设备信息。如果注册成功,则返回用户ID,后续对DVR的操作都需要通过此ID来实现。
2.4.3 启动预览监控视频
获取实时监控视频数据流,并显示在应用程序窗体中。在程序中的定义为:
function NET_DVR_RealPlay_V30(lUserID:Longint;lpClientInfo:LPNET_DVR_CLIENTINFO;fRealDataCall-Back_V30:TfRealDataCallBack_V30;pUser:Pointer;bBlocked:Boolean):Longint;stdcall;external'HCNetSDK.dll';
lUserID:NET_DVR_Login()或 NET_DVR_Login_V30()的返回值;lpClientInfo:采用何种方式预览;fbRealData-CallBack_V30:指向回调函数的指针;pUser:用户数据;bBlocked:请求码流过程是否阻塞。其中回调函数的定义为:procedure testRealDataCallBack _V30 (lRealHandle:Longint;dwDataType:Longword;pBuffer:LPByte;dw-BufSize:Longword;pUser:Pointer);stdcall。
2.4.4 停止预览监控视频
使实时监控视频停止在应用程序窗口中运行,在程序中的定义为:
function NET _DVR _StopRealPlay(lRealHandle:Longint):Boolean;stdcall;external'HCNetSDK.dll';
lRealHandle:预览句柄,NET_DVR_StopRealPlay的返回值,它并没有与设备断开,在设备中还存有相应的登录信息。
2.4.5 销毁设备
用户注销,在程序中的定义为:
function NET_DVR_Logout_V30(lUserID:LongInt):BOOL;stdcall;external'HCNetSDK.dll';
IUserID:用户ID,NET_DVR_Logout_V30的返回值,这时设备中已没有了用户登录信息,若要继续显示监控视频,还需要重新注册用户。
2.4.6 释放资源
清理应用程序的资源,在程序中的定义为:
function NET_DVR_Cleanup:BOOL;stdcall;external'HCNetSDK.dll';
2.4.7 主要功能代码
if NET_DVR_Init()then//初始化设备
self.Panel1.Caption:='初始化成功'
else
self.Panel1.Caption:='初始化失败';
lUserID:=NET_DVR_Login_V30(deviceIP,device-Port,userName,passWord,
@struDeviceInfo);//登录设备
if lUserID>=0then
self.Panel1.Caption:='登录成功,正在加载视频'
else
self.Panel1.Caption:='登录失败,错误代码:
'+inttostr(NET_DVR_GetLastError());
struPlayInfo.lChannel:=ichannel;
struPlayInfo.lLinkMode:=0;//TCP
struPlayInfo.sMultiCastIP:=NIL;struPlayInfo.hPlay-Wnd:=self.Panel1.Handle;
lRealHandle:=NET_DVR_RealPlay_V30(lUserID,@struPlayInfo,@testRealDataCallBack_V30,pUser,TRUE);
综上所述,根据流程图,在程序中调用重新定义的函数,微机室实时监控视频就可以显示在应用程序的窗口中。
为了使用户在同一时间内,可以查看更多的监控视频,本系统采用了多屏显示,以更加直观的方式展示给用户,提供一个良好的用户界面。当用户点击最大化按钮时,可以放大显示区域,点击最小化按钮时,系统还原成默认状态。
多屏显示主要是通过动态生成窗体,并且窗体的大小一致,通过设置窗体的Left和Top这两个属性来控制窗体显示的位置,设置窗体的Parent属性来控制窗体显示在哪个区域中,效果图如图6所示。主要代码如下。
hbplayfrm.Parent:=ScrollBox1;
hbplayfrm.Width:=trunc(width1);
hbplayfrm.Height:=trunc(height1);
hbplayfrm.Top:=trunc(row1*(height1+5)+5);
hbplayfrm.Left:=trunc(col1*(width1+5)+5);
图6 系统运行效果图
设计的基于校园网络的微机实验室视频监控系统的特点在于:系统将多个DVR进行了整合,打破了地域的限制,统一管理了所有的摄像机;提供了一个良好的用户界面,可以直观、简单、快捷、方便地查询到目标监控视频。
该系统已投入使用,经过长时间的测试,读取局域网监控视频,系统的反应时间小于0.1s,而读取其它两个校区监控视频的反应时间则小于1.5s;当网络速度达到30kb/s时,监控视频就可以流畅显示,这对于校园内的网络来说影响非常小,不会影响校园网络的正常运行。当然,将多个品牌的DVR再整合到该系统中,打破局域网的限制应用到互联网上,将会有更广阔的应用前景。
[1] 彭小桢,郝福珍,鄢楚平.基于B/S的视频监控系统客户端的设计与实现[J].计算机工程与应用,2007,43(24):208-210.
[2] 吕潇超,侯增选.基于C/S结构的数字视频监控软件系统[J].科学技术与工程,2007(9):1894-1898.
[3] 张敬谊,张申生,卢新明.基于C/S结构的面向对象设备管理系统的研究[J].计算机工程,2002,28(1):236-238.
[4] 王云鹏,雷毅,潘翔,等.CAXA电子图板的二次开发技术[J].计算机辅助设计与图形学学报,2002,14(2):190-191.