基于VC视频监控设备管理系统的设计与实现
发布时间:2015-07-07 09:28
摘 要 城市公共安全视频网络中设备种类众多,各种设备的管理方式不尽相同,其中相当一部分管理方式是非图形界面的命令行形式,这实际上造成了网络中设备管理的不便、混乱以及低效。针对这种现状,开发了基于图形界面的视频监控设备管理系统,建立数据库对设备信息进行整合规划,将各种设备的管理通信协议进行封装,统一设备管理接口。该系统在青岛市城市公共安全视频网络中得到了应用,取得了理想的效果,提高了设备管理的效率,实现了资源的整合。
关键词 vc;视频监控;设备管理;套接字
1 引言
随着人们对生活和工作环境安全性要求的不断提高,安全防范系统的重要性变得越来越突出,而视频监控系统其独有的特点使其进入了一个快速发展的时期,视频采集,视频传输,视频管理,视频显示和视频录像等各个重要方面都得到了长足的发展。但是对于视频监控的另一方面--设备的管理方面一直被忽略而停滞不前。现在对于设备的管理还停留在早期的利用telnet[1]实现远程登录上,早期的telnet管理方式有以下几个缺点:①界面不易于浏览,获取信息慢。②管理方式烦琐。③需要记忆大量的ip地址,所以这种管理方式效率非常低下。因此这成了制约视频监控技术发展的一大瓶颈。 目前,最为流行的开发方式是利用可视化开发工具进行开发,而vc是应用最为广泛的可视化开发工具,它的特点是把原来抽象的数字、图表、逻辑等用直观的图形图像的形式表现出来。 本系统开发基于“青岛市公共安全视频网”,项目选用北京博研新创公司的系列产品,通信协议采用公司提供的网络管理协议。设计的设备管理系统在visual c++6.0环境下实现了对视频监控中多台设备的数据查询、数据浏览、数据修改等功能,大大方便了用户的管理要求。系统采用socket[2]进行通信实现telnet管理功能。2 系统设计
2.1 系统网络结构
系统采用两种传输方式,在地理位置方便的地方,接入光纤进行传输,辅以微波设备进行备份,在一些比较特殊的地方(比如山脉),光纤接入比较困难,采用微波设备进行传输,保证传输信息及时有效。 实现设备管理系统[3]的功能,采用从管理计算机以设备网络管理协议发出各种命令(查询、修改、重启等)通过光端机或者微波设备传输到设备,从而实现设备与计算机之间进行通信。系统的网络结构如图1所示。2.2 软件系统功能划分
1)系统初始化及权限管理模块 通过从数据库中获取信息完成系统的初始化。以树的形式把所有设备的名字列在系统主界面的左侧。系统设有管理权限来决定用户所能做的工作,分为系统管理员和一般用户两级。一般用户可以查看所有设备信息,不能修改。系统管理员可以查看,也可以修改。 2)系统查询及浏览模块 系统初始化后,用户发出请求动作(单击设备)时,连接设备,获取信息,对收到的信息做出相应的处理,显示在界面供用户浏览。 3)系统修改模块 用户在界面上找到要修改的参数时,发出请求修改动作(双击该参数),弹出相应的对话框,提示用户如何进行修改。把修改后的信息发送到设备,完成参数的修改。2.3 通信协议
本协议描述的是编码器,解码器与播放器、管理服务器之间的通信协议。可以用来查询或者修改设备信息。网络管理协议在多数情况下使用tcp协议 ,由管理器向网管代理发送命令,网管代理返回结果。在局域网搜索设备时,使用udp协议,这种情况下只支持有限的命令。tcp和udp服务端都使用端口6180。不论是命令还是结果,统一使用表1的命令格式。 表1命令格式 命令 长度 数据 2字节 2字节 不定长 命令:指定命令码,取值范围0-65535 长度:指定数据域的大小,范围0-65532 数据:包含附加的数据,具体格式在每个命令中定义 (1)查询属性:命令码:0x0002 数据:属性名字列表,每个属性名一行,每行以’\n’字符结尾。 一个完整的属性名格式为:<section>.<key>,其中<section>为类别名,例如,查询设备的ip 地址命令格式为:n,查询第一路视频亮度为_brightness/n. (2)修改属性:命令码:0x0003 数据为文本格式,以<nl>(’\n’)作为换行符,每行设置一个属性。 设置属性值命令的返回结果没有附加的信息,根据错误码确定是否成功。2.4 软件设计
2.4.1 软件实现思路 本系统的软件实现分为:①连接数据库,导入设备名字。② 获取设备信息,进行相应处理。③修改设备信息。 各部分重点工作如下所述: 1)设备名字导入 建立数据库,建立相应的设备表信息,把网内的所有设备的名字以及ip地址等相关信息全部录入到表内。数据库连接方式采用mfc odbc 方式,使用cdatabase打开数据源的连接,使用向导加入由crecordset类派生的用户记录集类,完成对数据库表的绑定。使用记录集对象对数据库进行遍历操作,使设备名字在树型控件中列出。 以下是对数据库实现遍历操作: if(!m_pset->isopen()//m_pse是一个记录集指针 m_pset->open(); m_pset->movefirst(); htreeitem hbase=item("编码器",0,0);//生成树的根结点 while(!m_pset->iseof()) //判断是否到尾端{item(m_pset->m_name,0,0,hbase);//插入到树型控件 m_pset->movenext();//继续下一条记录 } m_pset->movefirst(); 2)设备信息的读入 构造一个连接函数,用来实现与设备的连接。为了使用vc的socket通信,需要在向导中选中windows socket选项。 连接函数说明如下: void connection(cstring str_ip) {//定义套接字 socket m_socket; m_socket=socket(af_inet,sock_stream,0); unsigned long ul =1; //设置为非阻塞模式 ioctlsocket(m_socket,fionbio,&ul); int error; sockaddr_in ipaddr;//一种结构体 _addr.s_un.s_addr =inet_addr(str_ip);//ip地址 _family = af_inet;//网际网区域 _port = htons(6180);//端口号 error=connect(m_socket,(sockaddr*)&ipaddr,sizeof(sockaddr)); if(error!=0)messagebox(“连接错误”); } 连接后,可以向设备发送查询命令,获取需要的信息,因此需要有getinfo()函数,函数代码如下: void getinfo() { //查询命令形成一个长字符串放在这里 char bufsend[200]=”commandline “; //获取字符串长度 intcommandcount=strlen(bufsend); bufsend[0]=0; bufsend[1]=0x02;//表示查询 bufsend[3]=0;//视第四个字节而定,如果超过256,则改为1,依次类推 //上面为1,则减去256 bufsend[4]=commandcount //重新形成一个字符串 strcpy(bufsend+4,”commandline”); send(m_socket,bufsend,220,0); //字符串发送到设备。 char bufreceive[230]; //定义一个接收数组,定义为全局变量 recv(m_socket,bufreceive,230,0); //从设备中得到信息 closesocket(m_socket);//关闭套接字 }对获得的bufreceive通过cstring类的find函数进行相应处理,得到相应的信息反馈到图形界面,实现信息读入。 3)修改设备信息 对每个参数进行修改,把修改后的信息传回设备,函数为setinfo(cstring str_command),把需要修改的属性按命令格式形成字符串,传给str_command,其它代码同读入基本相同,只不过需要把上面的bufsend[1]改为0x03(0x03表示修改)。 2.4.2 软件流程 首先连接数据库,把所有的设备名字导入到树型控件中。当选择其中一台设备,根据函数名字获取相对应的ip地址,调用连接函数与设备进行连接。连接成功后可以发送相应的查询命令到设备,将用户需要的信息查询出来,然后再经过适当的处理,使这些设息以可视化的形式反馈到用户浏览界面,如果需要修改参数,则选择相应的参数进行修改,再把修改后的参数发送回相应的设备。以此实现对设备的管理。通信过程实现流程如图2所示。 图2 通信流程图 2.4.3 界面设计 系统的界面设计采用全中文图形人机界面,界面设计友好,操作简单,所有的功能只需用鼠标点击菜单,按钮或者列表,以及双击参数即可完成。系统主界面如图3所示。 图3 系统主界面
3 系统的关键技术
3.1 windows 套接字
套接字(socket)是一种网络编程接口,它是对通信端点的一种抽象,提供了一种发送和接收数据的机制。用户目前可以使用两种套接字,它们是数据报套接字(datagram sockets)和流式套接字(stream sockets),本系统根据其特点选用流式套接字。 在使用套接字之前,必须先拥有一个套接字,系统调用socket()[6]向应用程序提供创建套接字的手段,其调用格式如下: socket pascal far socket(int af,int type,int protocol); 该调用要接收三个参数:af、type、protocol。参数af指定通信发生的区域,unix系统支持的地址族有:af_unix、af_inet、af_ns等,而dos、windows中仅支持af_inet,它是网际网区域。因此,地址族与协议族相同。参数type描述要建立的套接字的类型。参数protocol说明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为0,使用默认的连接模式。根据这三个参数建立一个套接字,并将相应的资源分配给它,同时返回一个整型套接字号。 建立套接字后,需调用connect()用于建立连接,connect()的调用格式如下: intpascalfarconnect(sockets,const structsockaddrfar*name,intnamelen); 参数s是欲建立连接的本地套接字描述符。参数name指出说明对方套接字地址结构的指针。对方套接字地址长度由namelen说明。如果没有错误发生,connect()返回0。否则返回值socket_error。在面向连接的协议中,该调用导致本地系统和外部系统之间连接实际建立。3.2 用户管理数据库的开发
用户管理数据库采用的是sql server数据库,建立用户权限表以及设备信息表,通过mfc odbc方式访问,使用类crecordset的函数movefirst()、movelast()、movenext()、moveprev()、isbof()、iseof()对设备信息表实现遍历操作,使用类crecordset的函数addnew增加设备或者函数delete删除设备。并根据用户登录情况确定用户是否可以修改设备信息,以此实现后台数据与前台界面操作的一致。4 结束语
“青岛市公共安全视频网”是青岛市政府重点扶持项目,由青岛理工大学现代通讯研究所联合公安局,交警,人防,边防等部门联合开发的大型视频监控网,包含有几百个视频源,上千台设备需要进行管理。根据该项目对设备管理的要求,利用visual c++做出了友好直观的浏览界面,实现了更便捷、更高效的管理方式。系统的主要优点有:①摒弃了传统的dos界面,改进的图形界面易于浏览,更快更好的获取信息。②把分散的设备管理整合在一起,实现了资源整合。③使设备易于维护。目前本管理系统已应用于青岛市公共安全项目中,系统运行稳定可靠,响应速度快,操作方便,获得了一致好评。随着计算机网络化和通信技术的快速发展,视频监控的设备管理方面必将得到更好的发展。参考文献
[1] postel, protocol specification[s].1983 [2] 蒋东兴.windows sockets网络程序设计大全[m].北京:清华大学出版社,1999:52-99 [3] 张敬谊等.基于c/s结构的面向对象设备管理系统的研究[j].计算机工程,2002,28(1):236-238 [4] 程永喜,蒋珉.基于tcp/ip协议的winsock网络编程及应用[j].计算机时代,2004,21(8).40-45 [5] 求是科技.visual c++6.0数据库开发技术与工程实践[m].北京:人民邮电出版社,2004.78-99 [6] 汪翔,袁辉.visual c++实践与提高—网络编程篇[m].北京:中国铁道出版社,2001.17-25下一篇:网络入侵、攻击与防范技术