朱耀麟,李 倩,王昊星
(1.西安工程大學(xué)電子信息學(xué)院,陜西西安 710048;2.中煤科工集團西安研究院有限公司,陜西西安 710055)
隨著網(wǎng)絡(luò)的迅速發(fā)展,各種各樣與網(wǎng)絡(luò)相關(guān)的技術(shù)和產(chǎn)品應(yīng)運而生,目前備受矚目的網(wǎng)絡(luò)視頻監(jiān)控產(chǎn)品就是其中一種。它一般包括網(wǎng)絡(luò)攝像機,視頻編碼器,網(wǎng)絡(luò)視頻錄像機(NVR)等。但是,現(xiàn)在大部分的視頻監(jiān)控系統(tǒng)還需要手動添加服務(wù)端(網(wǎng)絡(luò)攝像機),并且對服務(wù)端的配置等都是手動操作,同時在網(wǎng)絡(luò)監(jiān)控系統(tǒng)中,各種產(chǎn)品會由很多公司生產(chǎn),不同品牌的設(shè)備間的互通問題迫切需要解決。在2008年由SONY等企業(yè)創(chuàng)建的ONVIF組織,該組織制訂的協(xié)議標(biāo)準(zhǔn)目標(biāo)是解決設(shè)備互通等問題,重點關(guān)注客戶端與服務(wù)端的接口通信,并且以Web Services為基礎(chǔ),其中設(shè)備發(fā)現(xiàn)與設(shè)備管理模塊是搭建網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的首要步驟。目前,已經(jīng)有一批視頻監(jiān)控工作者對符合ONVIF的產(chǎn)品進(jìn)行了研究與設(shè)計[1-5]。文獻(xiàn)[1]是對開放式網(wǎng)絡(luò)視頻接口協(xié)議ONVIF的研究,先對ONVIF協(xié)議進(jìn)行描述與分析,然后設(shè)計客戶端,并對客戶端訪問目標(biāo)設(shè)備的情況進(jìn)行測試,主要完成了設(shè)備查找、管理及實時流傳輸?shù)臋z測;文獻(xiàn)[2]設(shè)計了基于ONVIF的NVR軟件平臺,是對具體的網(wǎng)絡(luò)視頻監(jiān)控設(shè)備的設(shè)計,主要完成了NVR的基本功能,并對設(shè)計的NVR軟件進(jìn)行測試;文獻(xiàn)[3]主要對基于ONVIF協(xié)議的設(shè)備發(fā)現(xiàn)功能進(jìn)行了研究與設(shè)計,對發(fā)現(xiàn)過程進(jìn)行詳細(xì)分析;文獻(xiàn)[4]重點描述 gSOAP軟件在符合ONVIF協(xié)議的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)中的應(yīng)用,主要對gSOAP工具包進(jìn)行介紹以及對媒體服務(wù)功能進(jìn)行研究;文獻(xiàn)[5]是對符合ONVIF協(xié)議的網(wǎng)絡(luò)攝像機應(yīng)用接口的研究與設(shè)計,和文獻(xiàn)[2]相比,均屬于具體的設(shè)備設(shè)計,不同點在于文獻(xiàn)[5]重點研究ONVIF協(xié)議制定的幾項服務(wù)功能,而文獻(xiàn)[2]設(shè)計的NVR選擇了ONVIF服務(wù)功能中的重要功能,還設(shè)計了NVR需要的解碼器、Web客戶端等。上述文獻(xiàn)基本都涉及到ONVIF協(xié)議中的設(shè)備發(fā)現(xiàn)服務(wù)功能,也有對設(shè)備管理功能的研究。但是,對實時視頻流地址的獲取以及轉(zhuǎn)發(fā)實現(xiàn)還有待研究。
本文根據(jù)ONVIF協(xié)議,進(jìn)行網(wǎng)絡(luò)視頻監(jiān)控客戶端接口的服務(wù)功能設(shè)計,做到客戶端能夠自動發(fā)現(xiàn)并連接服務(wù)端,同時對服務(wù)端進(jìn)行配置,在上述兩項功能的基礎(chǔ)之上能夠獲取實時視頻流地址,并通過VLC播放,實現(xiàn)視頻流轉(zhuǎn)發(fā)。該設(shè)計基于2012年7月更新的ONVIF標(biāo)準(zhǔn)的WSDL文檔和一些核心規(guī)范文檔,根據(jù)規(guī)范里的服務(wù)功能— —設(shè)備發(fā)現(xiàn)和設(shè)備管理以及媒體配置(只利用視頻流實時轉(zhuǎn)發(fā)部分)進(jìn)行接口設(shè)計,形成小的客戶端,然后通過與符合ONVIF標(biāo)準(zhǔn)的網(wǎng)絡(luò)攝像機(服務(wù)端)的通信,測試接口服務(wù)的實際應(yīng)用情況。整個設(shè)計過程需要用到gSOAP工具,并且在設(shè)計前需對gSOAP文件夾中的typemap.dat文件進(jìn)行必要的空間前綴添加,同時對WSDL文件的空間前綴進(jìn)行必要修改。
本文設(shè)計的網(wǎng)絡(luò)視頻監(jiān)控客戶端接口需要完成發(fā)現(xiàn)服務(wù)端,并對服務(wù)端進(jìn)行設(shè)備管理、實時視頻流地址獲取,實現(xiàn)轉(zhuǎn)發(fā)觀看?;谏鲜瞿繕?biāo),對客戶端接口進(jìn)行模塊劃分,首先需要對客戶端與服務(wù)端在網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)中的通信方式進(jìn)行分析。
基于ONVIF協(xié)議的設(shè)備間具體通信情況如圖1所示:
圖1 客戶端與服務(wù)端的通信方式Fig.1 Client and server communication
根據(jù)圖1所示,ONVIF客戶端與ONVIF服務(wù)端的通信情況可以看成是由4部分組成:第一部分是設(shè)備發(fā)現(xiàn)模塊;第二部分是設(shè)備管理模塊;第三部分和第四部分是媒體配置模塊中的實時流轉(zhuǎn)發(fā)內(nèi)容。
ONVIF協(xié)議中的設(shè)備發(fā)現(xiàn)模塊,采用WSDiscovery文檔描述的WS-Discovery方案,能夠?qū)崿F(xiàn)自動搜索服務(wù)端,發(fā)現(xiàn)其IP地址等一些信息。這個設(shè)備發(fā)現(xiàn)方案,采用的是SOAP通信方式和UDP消息傳輸格式,使用 Hello—Probe—Probe-Match—Bye的方式,其中,由加入網(wǎng)絡(luò)監(jiān)控系統(tǒng)的每個服務(wù)端向客戶端所在的網(wǎng)絡(luò)多播發(fā)送Hello,客戶端則多播發(fā)送Probe,能夠匹配Probe報文中的Types和Scopes內(nèi)容的服務(wù)端攝像機單播回復(fù)ProbeMatch;當(dāng)服務(wù)端攝像機離開該網(wǎng)絡(luò)時,則需要多播發(fā)送Bye消息。在整個過程中,攝像機可以隨意加入或離開網(wǎng)絡(luò),但不影響客戶端對攝像機的搜索發(fā)現(xiàn),這是WS-Discovery的特點,也是本設(shè)計中做到自動搜索的前提。WS-Discovery方案中還有一種Discovery Proxy方式,在這種方式中,一個DP或多個DP加入客戶端與服務(wù)端所在的網(wǎng)絡(luò),單播發(fā)送Hello;當(dāng)客戶端接收到DP的Hello,就不會顧及服務(wù)端發(fā)送的任何信息,只向DP單播發(fā)送Probe。服務(wù)端也向DP發(fā)送單播Probe,在這種情況下,客戶端與服務(wù)端就利用DP進(jìn)行通信,當(dāng)在同一局域網(wǎng)或者只有少量相機的環(huán)境中可以不使用網(wǎng)絡(luò)代理服務(wù)這種方式。
在本設(shè)計中,由于網(wǎng)絡(luò)攝像機數(shù)量有限,不考慮代理方式。
設(shè)備管理,用于獲取設(shè)備的功能和信息。根據(jù)ONVIF-Core-Specification-v220文檔,該模塊被劃分為5類,分別是 Capabilities(功能),Network(網(wǎng)絡(luò)),System(系統(tǒng)),Security(安全),I/O(輸入輸出)。在本文中,主要涉及功能和系統(tǒng)兩部分。
根據(jù)設(shè)備發(fā)現(xiàn)模塊得到的服務(wù)端的IP(XAddrs)地址,從而可以獲取服務(wù)端的功能信息。當(dāng)進(jìn)行獲取信息操作時,根據(jù)本文的設(shè)計,需要得到Media URL,該URL對下面要進(jìn)行的視頻流轉(zhuǎn)發(fā)起前提作用。
對于系統(tǒng)部分,可以對網(wǎng)絡(luò)攝像機本身進(jìn)行管理和配置,比如網(wǎng)絡(luò)攝像機信息的獲取,系統(tǒng)時間的獲取和設(shè)置等。對設(shè)備的配置,不是任意的行為,必須先利用ONVIF device test tool對網(wǎng)絡(luò)攝像機進(jìn)行測試,根據(jù)得到的報文分析判斷該設(shè)備是否可以進(jìn)行日期時間設(shè)置。根據(jù)判定,本文用到的網(wǎng)絡(luò)攝像機可以進(jìn)行對系統(tǒng)日期時間的重新設(shè)置。
在ONVIF協(xié)議中,媒體是利用 media profiles進(jìn)行控制的。media profiles的獲取需要依靠Media URL,這是在設(shè)備管理模塊中的功能部分中得到的。
媒體文件中的配置有很多種,比如音頻編碼配置,視頻編碼配置等,并且在服務(wù)端設(shè)備支持的情況下,還可以對媒體文件進(jìn)行新建、修改、刪除。一般網(wǎng)絡(luò)攝像機中都會有默認(rèn)的媒體文件,根據(jù)這個文件,就可以對媒體進(jìn)行配置。本文即采用默認(rèn)媒體文件對視頻流地址進(jìn)行獲取。
由于設(shè)備等條件限制,本文利用VLC播放器能夠播放網(wǎng)絡(luò)地址文件的特點,對得到的視頻流StreamUri進(jìn)行轉(zhuǎn)發(fā)播放。
ONVIF規(guī)范采用Web services架構(gòu),客戶端與服務(wù)端要利用SOAP協(xié)議進(jìn)行數(shù)據(jù)交互。Web services是基于網(wǎng)絡(luò)的、分布式的模塊化組件,利用HTTP和SOAP協(xié)議使數(shù)據(jù)在Web上傳輸。所以實現(xiàn)客戶端的接口設(shè)計,需要搭建Web服務(wù)框架,然后將具體的Web服務(wù)進(jìn)行實現(xiàn)。
ONVIF服務(wù)功能的開發(fā)大致流程如圖2所示:
圖2 Web服務(wù)開發(fā)流程Fig.2 Development process ofWeb service
WSDL文件,實際上就是用XML語言描述的ONVIF不同的服務(wù)功能內(nèi)容,根據(jù)WSDL內(nèi)容,可以制定相應(yīng)的Web services,同時,Web services的實現(xiàn)要使用Java或者C++語言。根據(jù)實際情況,本文為了簡化開發(fā)工作,使用gSOAP-2.8.9工具包,選擇C++語言進(jìn)行開發(fā)。通過gSOAP工具包將ONVIF服務(wù)轉(zhuǎn)換成C++框架代碼后,將進(jìn)行具體的服務(wù)功能的代碼實現(xiàn)。
在本文設(shè)計的開始部分,即在進(jìn)行解析WSDL文件前,必要的步驟是在gsoap文件夾中找到typemap.dat文件并向其添加一些配置,即ONVIF recommended prefixes,WS-Discovery 1.0 remapping,SOAP-ENV mapping,OASIS recommended prefixes等項,這些配置的內(nèi)容是一些空間前綴地址,如 tds=http://www.onvif.org/ver10/device/wsdl,添加的意義在于進(jìn)行WSDL文件解析為C++文件時需要用到這部分內(nèi)容。并且,從ONVIF官網(wǎng)下載的WSDL文件也需要對其schema-Location進(jìn)行修改。在本文中,需要改為schema-Location="onvif.xsd"。
1)利用wsdl2h.exe進(jìn)行頭文件編譯。
在電腦的cmd.exe程序中,輸入命令,以設(shè)備發(fā)現(xiàn)服務(wù)為例,如
wsdl2h-c-o remotediscovery.h-s remotediscovery.wsdl-IE:onvifgsoap;E:onvifgsoapimport,運行后可得到頭文件remotediscovery.h。
2)利用soapcpp2.exe生成相應(yīng)的可用于編譯的代碼。
根據(jù)得到的頭文件,輸入soapcpp2-L-C-x remotediscovery.h-IE:onvifgsoap;E:onvifgsoapimport,可得到編譯所需的文件,DiscoveryLookup-Binding.nsmap,soapC.c,soapClient.c,soapH.h,soapStub.h。
使用Microsoft Visual Studio 2008工具,根據(jù)wsdl2h.exe和soapcpp2.exe得到的編譯所需頭文件和源文件,建立工程,實現(xiàn)設(shè)備發(fā)現(xiàn),設(shè)備管理及視頻流轉(zhuǎn)發(fā)。
2.2.1 設(shè)備發(fā)現(xiàn) 該功能模塊中,首先需要進(jìn)行初始化。
用到的初始化函數(shù)是:
soap-default-SOAP-ENV--Header(soap,&header);
soap-default-d--ScopesType (soap,&sScope);soap-default-d--ProbeType(soap,&req);在同一局域網(wǎng)中,多播發(fā)送Probe,調(diào)用的函數(shù)是:
soap-call---dndl--Probe(soap,"soap.udp://239.255.255.250:3702/",NULL,&req,&resp)。
2.2.2 設(shè)備管理 根據(jù)設(shè)計需要,該模塊需要設(shè)計Get services功能,該功能可以得到網(wǎng)絡(luò)攝像機所支持服務(wù)的服務(wù)地址。本文中需要用到media服務(wù)地址。
工程需要進(jìn)行結(jié)構(gòu)體聲明,構(gòu)建soap-new(),然后調(diào)用函數(shù):
soap-call---tds--GetServices(soap,"http://192.168.100.168/onvif/device-service",NULL,& GetServices& GetServicesResponse)獲取服務(wù)。
輸出的運行結(jié)果,可以根據(jù)struct-trt--Get-ServicesResponse GetServicesResponse的定義進(jìn)行選擇。
根據(jù)設(shè)計要求,本文用的是:
GetServicesResponse.Services-> XAddr。.
c)獲取rtsp地址,進(jìn)行視頻流轉(zhuǎn)發(fā)
工程需要進(jìn)行結(jié)構(gòu)體聲明,GetStreamUri.ProfileToken取值 "Profile-token-0";在調(diào)用函數(shù)soap-call---trt--GetStreamUri時,soap-endpoint地址是http://192.168.100.168:80/onvif/services。
輸出結(jié)果選用 GetStreamUriResponse.MediaUri-> Uri,即 printf("StreamUri=%s ",Get-StreamUriResponse.MediaUri->Uri)。
使用筆記本電腦,與符合ONVIF的網(wǎng)絡(luò)攝像機相連(本次實驗使用一臺攝像機),對利用VS 2008工具建立的工程進(jìn)行編譯運行。為驗證設(shè)計的客戶端接口,利用ONVIF device test tool對同一臺IP攝像機進(jìn)行測試。
如圖3所示,獲取的攝像機IP地址是http://192.168.100.168:80/onvif/device-service。
圖3 設(shè)備發(fā)現(xiàn)Fig.3 Device discovery
根據(jù)設(shè)備發(fā)現(xiàn)功能獲取的地址,可順利完成設(shè)備管理模塊,得到 Media服務(wù)地址:http://192.168.100.168:80/onvif/services,如圖4所示。
圖4 服務(wù)地址Fig.4 Service address
根據(jù)設(shè)備管理獲取的地址,進(jìn)而獲取Media Profile。根據(jù)以上信息,獲取StreamUri,為rtsp://192.168.100.168:554/0。由圖5所示。
圖5 視頻流地址Fig.5 StreamUriaddress
最后利用 VLC播放器可連接該地址實現(xiàn)轉(zhuǎn)發(fā)攝像機拍攝內(nèi)容,視頻截圖如圖6所示。
圖6 轉(zhuǎn)發(fā)的URI內(nèi)容Fig.6 Transmit the conten of URI
根據(jù)獲取的視頻流地址可進(jìn)行VLC播放可知,本文獲取的StreamUri是正確的。
完成上述測試后,使用ONVIF device test tool對同一臺IP攝像機進(jìn)行設(shè)備發(fā)現(xiàn)、設(shè)備管理、實時視頻流地址獲取3種服務(wù)功能的測試,其測試結(jié)果與上述工程運行結(jié)果相同。
綜合上述測試結(jié)果可知,本文設(shè)計的客戶端接口能夠完成ONVIF協(xié)議的設(shè)備發(fā)現(xiàn)、設(shè)備管理、實時視頻流地址獲取服務(wù)功能,并能夠通過VLC播放器對IP攝像機拍攝的視頻進(jìn)行播放,基本達(dá)到設(shè)計目標(biāo)。
本文研究了ONVIF協(xié)議的網(wǎng)絡(luò)視頻監(jiān)控客戶端,根據(jù)最新的ONVIF協(xié)議內(nèi)容進(jìn)行了網(wǎng)絡(luò)視頻監(jiān)控客戶端的設(shè)備發(fā)現(xiàn)和設(shè)備管理服務(wù)功能的接口研究,并完成視頻流實時轉(zhuǎn)發(fā),解決了設(shè)備間的互通問題。設(shè)計用到的設(shè)備與工具有Microsoft visual studio 2008,ONVIF device test tool,VLC 播放器,MiniSniffer抓包工具以及gSOAP-2.8.9工具包,其中對gSOAP-2.8.9的一些配置和ONVIF的WSDL文件進(jìn)行了必要修改。結(jié)果顯示網(wǎng)絡(luò)攝像機IP地址,StreamUri等可以獲取,表明利用WS-Discovery方式可實現(xiàn)自動搜索網(wǎng)絡(luò)攝像機的IP,并且可以獲得并配置攝像機信息,視頻流Uri也可得到,并利用VLC播放器實現(xiàn)轉(zhuǎn)發(fā)。
[1] 金?。_放式網(wǎng)絡(luò)視頻接口協(xié)議研究[D].南京:南京大學(xué),2011.
[2] 徐飛明.基于ONVIF協(xié)議的NVR軟件平臺的設(shè)計與開發(fā)[D].杭州:浙江大學(xué),2012.
[3] 馬宇昌,沈蘇彬,歐陽志友.基于ONVIF標(biāo)準(zhǔn)的設(shè)備發(fā)現(xiàn)的設(shè)計與實現(xiàn)[J].計算機技術(shù)與發(fā)展,2013,23(11):224-228.
[4] 肖路歡,謝燦,何策.gSOAP在基于ONVIF協(xié)議的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)中的應(yīng)用[J].?dāng)?shù)字技術(shù)與應(yīng)用,2013(6):128-129.
[5] 馬宇昌.網(wǎng)絡(luò)攝像機應(yīng)用接口的研究與實現(xiàn)[D].南京:南京郵電大學(xué),2013.
[6] ONVIF.ONVIF Core Specification ver2.1[EB/OL].[2011-06-01].http://www.onvif.org/.
[7] Microsaft Coporation.Web Services Dynamic Discovery(WS-Discovery)[S].2005-04.
[8] ONVIF.ONVIF-WG-APG-Application-Programmer's-Guide[EB/OL].[2011-05-02].http://www.onvif.org/.