宛吉林,沈琼霞
(1.光纤通信技术和网络国家重点实验室 湖北 武汉 430074;2.武汉邮电科学研究院 湖北 武汉 430074)
随着如今视频监控系统已经发展到系统网络化时期,NVR系统基于网络摄像头来进行监控,即IP监控系统[1]。由于NVR系统和前端IPC(IP camera)的网络网段常常出现不统一而导致,设备发现和互连出现的问题,使得NVR系统往往只能在某一个网段和前端IPC进行连接。文中研究的就是通过开发Onvif协议来实现双网段的功能,使得NVR系统和前端IPC实现任意网段的设备发现和搜素。
NVR最主要的功能是通过网络接收IPC(网络摄像机)设备传输的数字视频码流,并进行存储、管理,从而实现网络化带来的分布式架构优势。为了实现局域网内NVR对IPC的统一管理,实现对任意网段的设备发现和连接功能。可以在NVR和前端IPC设置一个共同的副网段的地址,假如为10的网段。这个网段对于用户来说是隐蔽的,不可更改的地址,可以在任何情况下使用该网段实现互连和设备发现。这就需要涉及到两个方面的设计问题,如何实现Onvif协议的多网段设备发现,以及NVR系统如何获取前端IPC设备服务端的副网段地址 (10网段的地址),这个地址用来替换掉Onvif接口所获得的各profile和url中的主网段地址。设计模式如图1所示。
图1 系统结构设计图Fig.1 Structure diagram of the system design
在ONVIF协议规范中,与设备进行通信交互,首当其冲的问题就是ONVIF协议的设备发现服务,这是其他服务的基础。ONVIF协议运用Ws-Discovery(Web Services Dynamic Discovery,Web Services动态搜索)协议。这是一种实现设备自动发现动态搜索的方法,能够实现对多个目标服务的发现,客户端先用多播方法发送一个探测包,目标服务监听到后,若发现匹配便以单播的方法回复给客户端。
文中NVR系统借助onvif协议中采用的ws-discovery协议的Ad-Hoc模式完成局域网内的设备搜索。在Ad-Hoc模式下,客户端以广播的形式在一定的网络范围了发送探测(Probe报文)消息以搜寻目标服务[2]。在该探测消息中,包含相应的搜寻条件,如设备类型(type)。符合该条件的目标服务在接收到探测消息之后,将自身相关的信息(scope信息,包括主网段的地址)回复给作为广播消息发送源的客户端(即NVR端)[3]。客户端根据获取到的服务信息,选择适合的服务进行调用。我们就可以在NVR端通过设备io接口获取NVR设备的配置ip,作为localip传参给soap结构体。在NVR端创建好Probe的报文消息,指定type类型为Network Video Transmitter和唯一的urn:uuid信息,可以用当前的时间作文随机数填入进去,然后通过多播地址239.255.255.250和端口3702来向局域网内发送该Probe消息[4]。Onvif多网段搜索流程如图2所示。
图2 Onvif多网段搜索流程图Fig.2 Flow chart of onvif network segments search
在Onvif代码中的soap结构体中添加localip成员,在soap socket的tcp_connect()函数中套接字bind绑定当前的localip,函数主要实现部分如下:
ONVIF协议是基于SOAP+XML消息格式进行通信的[5],在搜索之前需要对SOAP消息进行准备工作。在NVR端,创建一个这样的 soap实例struct soap mysoap,soap_init(&mysoap)初始化soap结构体环境变量,通过设备io接口linux函数 ioctl获取 NVR设备的配置 ip,传参给 mysoap.localip,设置 mysoap.connect_flags为SO_BROADCAST表示广播,然后填写好 mysoap.header消息的头部信息(wsa__MessageID、wsa__To、wsa__Action),主要是 urn:uuid 信息(唯一性,可以用当前的时间作为随机数填入进去),然后便是创建好Probe的报文消息,指定probe.d__Types类型为NetworkVideoTransmitter,并且设置mysoap的命名空间调用函数soap_set_namespaces[6]。 由此得到Probe报文的SOAP_XML请求消息如下:
然后通过多播地址239.255.255.250和端口3702来向局域网内发送该Probe消息。其函数实现如下:
根据这样的步骤,客户端将广播消息通过SOAP协议通知到局域网络内,等到符合条件的设备响应。
在IPC端需要有与NVR系统一致的副网段地址,才能够对NVR系统的广播包进行响应的回应。同时IPC应当有合适的消息格式提供给NVR系统,来使NVR系统获取到该副网段的地址。故IPC端应该配置副网段的网络地址(如10网段地址),并设计在onvif搜索回应包中包含10网段的信息,可以在ProbeMatches报文中的scopes字段中加一条信息,故定义了一种ProbeMatches的格式,通过onvif测试软件Onvif Conformance Test Tool可以看到IPC端的回应报文,如图3所示。
图3 IPC端添加副网段的搜索回应图Fig.3 Chart response of IPC added the sub network segment
可以看到onvif测试软件通过10.168.1.181的网址来进行局域网内的IPC设备搜索,发现了Device Service Address为192.168.200的IPC,这正是因为在IPC端设计有10网段的地址,才能够onvif协议能够发现该设备。同时,IPC端在scopes中添加了subaddress的字段,其中包含了副网段的地址(10.0.10.229)。这样可以使得NVR系统在设备发现时,可以准确简便的提取获得该副网段的地址,用于后面的连接管理过程。
通过NVR和IPC前端的配合设计,就能完成预想的设计目的,实现任意网段的设备搜索和添加连接。NVR系统和IPC端添加好相同的副网段,在搜索时就能够发现IPC设备,同时提取实际的服务地址,即副网段地址,用于替换掉onvif协议接口所获得的各profile和音视频播放url中的主网段地址,这样就可以实现两者之间的连接。如图4所示,在Hi3531芯片Linux2.6内核的平台上运行我们的NVR系统,在搜索和添加部分实现了该设计,并完成实际应用。
图4 NVR系统的搜索添加各网段IPC图Fig.4 Interface chart of the NVR system searching and connecting
文中介绍了在NVR系统中onvif协议的设备发现和连接管理IPC的改进方法,以及和前端IPC的对应设计,从而可以实现NVR和IPC在副网段的设备发现和互连管理,解决了网段不一致时出现的设备发现和互连管理的问题,该设计方案简便地解决了NVR设备发现的网络局限和连接管理问题,具有重要的实际运用价值。
[1]赵也倪.基于ONVIF的智能监控管理软件设计 [D].哈尔滨:哈尔滨工业大学,2012.
[2]马宇昌,沈苏彬,欧阳志.基于ONVIF标准的设备发现的设计与实现[J].计算机技术与发展,2013(11):224-228.MA Yu-chang,HEN Su-bin,OUYANG Zhi.Design and implementation for device discovery based on ONVIF[J].Computer Technology and Development,2013(11):224-228.
[3]储强.ONVIF协议媒体服务的设计实现[D].哈尔滨:哈尔滨工业大学,2012.
[4]李校林,肖路欢,何策.基于ONVIF协议的NVR系统中网络视频接口的设计[J].电视技术,2014,38(11):166-169.LI Xiao-lin,XIAO Lu-huan,HE Ce.Design and implementation of NVR system network video interface based on ONVIF protocol[J].Video Eengineering,2014,38(11):166-169.
[5]罗正华,陈绍祥,傅勇.基于ONVIF标准的视频监控技术研究[J].成都大学学报,2013(12):378-382.LUO Zheng-hua,CHEN Shao-xiang,FU Yong.Research for video monitoring technology based on ONVIF[J].Journal of Chengdu University,2013(12):378-382.
[6]徐飞明.基于ONVIF协议的NVR软件平台的设计与开发[D].杭州:浙江大学,2012.