摘 要 城市公共安全视频网络中设备种类众多,各种设备的管理方式不尽相同,其中相当一部分管理方式是非图形界面的命令行形式,这实际上造成了网络中设备管理的不便、混乱以及低效。针对这种现状,开发了基于图形界面的视频监控设备管理系统,建立数据库对设备信息进行整合规划,将各种设备的管理通信协议进行封装,统一设备管理接口。该系统在青岛市城市公共安全视频网络中得到了应用,取得了理想的效果,提高了设备管理的效率,实现了资源的整合。
关键词 vc;视频监控;设备管理;套接字
1 引言
随着人们对生活和工作环境安全性要求的不断提高,安全防范系统的重要性变得越来越突出,而视频监控系统其独有的特点使其进入了一个快速发展的时期,视频采集,视频传输,视频管理,视频显示和视频录像等各个重要方面都得到了长足的发展。但是对于视频监控的另一方面--设备的管理方面一直被忽略而停滞不前。现在对于设备的管理还停留在早期的利用telnet
[1]实现远程登录上,早期的telnet管理方式有以下几个缺点:①界面不易于浏览,获取信息慢。WwW.133229.COM②管理方式烦琐。③需要记忆大量的ip地址,所以这种管理方式效率非常低下。因此这成了制约视频监控技术发展的一大瓶颈。
目前,最为流行的开发方式是利用可视化开发工具进行开发,而vc是应用最为广泛的可视化开发工具,它的特点是把原来抽象的数字、图表、逻辑等用直观的图形图像的形式表现出来。
本系统开发基于“青岛市公共安全视频网”,项目选用北京博研新创公司的系列产品,通信协议采用公司提供的网络管理协议。设计的设备管理系统在visual c
++6.0环境下实现了对视频监控中多台设备的数据查询、数据浏览、数据修改等功能,大大方便了用户的管理要求。系统采用socket
[2]进行通信实现telnet管理功能。
2 系统设计
2.1 系统网络结构
系统采用两种传输方式,在地理位置方便的地方,接入光纤进行传输,辅以微波设备进行备份,在一些比较特殊的地方(比如山脉),光纤接入比较困难,采用微波设备进行传输,保证传输信息及时有效。
实现设备管理系统
[3]的功能,采用从管理计算机以设备网络管理协议发出各种命令(查询、修改、重启等)通过光端机或者微波设备传输到设备,从而实现设备与计算机之间进行通信。系统的网络结构如图1所示。
图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 地址命令格式为:net.ipaddr/n,查询第一路视频亮度为enc0.vid_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=m_tree.insertitem("编码器",0,0);//生成树的根结点
while(!m_pset->iseof()) //判断是否到尾端{m_tree.insertitem(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;//一种结构体
ipaddr.sin_addr.s_un.s_addr =inet_addr(str_ip);//ip地址
ipaddr.sin_family = af_inet;//网际网区域
ipaddr.sin_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,reynolds.rfc854.telnet 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