宛吉林,沈瓊霞
(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.