張 萍,胡應(yīng)坤
(廣東工貿(mào)職業(yè)技術(shù)學(xué)院 計算機與信息工程系,廣東 廣州 510510)
視頻數(shù)據(jù)相對于其他數(shù)據(jù)更加直觀,在物聯(lián)網(wǎng)方案中加入視頻,能為用戶提供更豐富的信息和更好的體驗。OneNET是由中國移動打造的物聯(lián)網(wǎng)開放平臺。平臺支持MQTT、EDP、MOBUS等十多種主流的物聯(lián)網(wǎng)協(xié)議,支持傳感器采集數(shù)據(jù)、圖片和視頻數(shù)據(jù)的上傳及使用,幫助開發(fā)者輕松實現(xiàn)設(shè)備接入與設(shè)備連接,快速完成產(chǎn)品開發(fā)部署,為智能硬件、智能家居產(chǎn)品提供完善的物聯(lián)網(wǎng)解決方案。本文詳細分析了OneNET視頻通信流程及通信協(xié)議,設(shè)計了應(yīng)用服務(wù)程序,提出了一種基于OneNET云平臺構(gòu)建視頻應(yīng)用的方案。
本設(shè)計中視頻設(shè)備采用市場上成熟的網(wǎng)絡(luò)攝像頭產(chǎn)品,產(chǎn)品需支持 ONVIF、RTSP、RTP、RTCP、SDP等協(xié)議。網(wǎng)絡(luò)攝像頭完成音視頻數(shù)據(jù)采集、編碼,使用ONVIF協(xié)議和應(yīng)用服務(wù)程序通信,確定網(wǎng)絡(luò)視頻的接口、數(shù)據(jù)類型以及數(shù)據(jù)交互的模式,將音視頻數(shù)據(jù)傳送給應(yīng)用服務(wù)程序。應(yīng)用服務(wù)程序負責在云平臺注冊設(shè)備、創(chuàng)建視頻通道,并使用RTMP協(xié)議將接收到的音視頻數(shù)據(jù)上傳至云平臺。播放設(shè)備可以是安裝了流媒體播放器的PC、手機、平板電腦等,通過RTMP/HLS協(xié)議獲取音視頻數(shù)據(jù)進行播放。基于OneNET云平臺的視頻應(yīng)用系統(tǒng)框架如圖1所示。

圖1 基于OneNET云平臺的視頻應(yīng)用
如圖2所示為基于OneNET云平臺的視頻應(yīng)用通信流程。具體如下:

圖2 基于OneNET云平臺的視頻應(yīng)用通信流程
(1)應(yīng)用服務(wù)程序(ONVIF客戶端)讀取配置文件,獲得視頻設(shè)備IP,并連接視頻設(shè)備(ONVIF服務(wù)器)。ONVIF規(guī)范規(guī)定設(shè)備管理和控制部分所定義的接口均以Web Services形式提供,作為服務(wù)提供者的設(shè)備為服務(wù)端。每一個支持ONVIF規(guī)范的終端設(shè)備均須提供與功能相對應(yīng)的Web Services程序。服務(wù)端與客戶端的數(shù)據(jù)交互采用SOAP協(xié)議。ONVIF中的其他部分,比如音視頻流,則通過RTP/RTSP協(xié)議進行交互。客戶端根據(jù)WSDL描述文檔,會生成一個SOAP請求消息,該請求會被嵌入在一個HTTP POST請求中,發(fā)送到Web Services所在的Web服務(wù)器。Web Services請求處理器解析收到的SOAP請求,調(diào)用相應(yīng)的Web Services,再生成相應(yīng)的SOAP應(yīng)答。Web服務(wù)器得到SOAP應(yīng)答后,會再通過HTTP應(yīng)答的方式把信息送回到客戶端。
以應(yīng)用服務(wù)程序獲取視頻能力為例,進行如下說明:
①應(yīng)用服務(wù)程序向視頻設(shè)備發(fā)送HTTP POST請求,POST的內(nèi)容是WSDL描述文件,獲取設(shè)備Analytics、Device、Event、Imaging、Media、PTZ 等方面的能力。WSDL描述文件內(nèi)容如下:


從上述內(nèi)容可以看出,此設(shè)備支持Analytics、Imaging、Media、PTZ,且視頻傳輸?shù)姆绞绞荝TP_RTSP_TCP方式。
(2)應(yīng)用服務(wù)程序以RTSP協(xié)議與視頻設(shè)備交互,完成認證、獲取音視頻流信息,比如音視頻編碼格式信息等步驟,視頻設(shè)備按照RTP協(xié)議封裝音視頻數(shù)據(jù)。為保證畫質(zhì),傳輸層協(xié)議使用TCP,而不是UDP。下面給出了視頻設(shè)備反饋的SDP內(nèi)容:


(3)應(yīng)用服務(wù)程序以UDP方式與OneNET引導(dǎo)機(183.230.40.42:9101)通信,獲得OneNET命令處理服務(wù)器地址,后續(xù)應(yīng)用服務(wù)程序與OneNET命令處理服務(wù)器直接通信。
(4)應(yīng)用服務(wù)程序讀取配置文件,根據(jù)配置文件信息,向OneNET命令處理服務(wù)器注冊視頻設(shè)備,添加視頻通道。配置文件采用JSON格式,包含三部分內(nèi)容:①profile,配置OneNET云平臺上的產(chǎn)品ID和設(shè)備注冊碼;②ONVIF,配置OneNET云平臺上的視頻通道和視頻設(shè)備所對應(yīng)的實際設(shè)備所在的IP、登錄用戶名和密碼,一臺視頻設(shè)備對應(yīng)云平臺上的一個視頻通道,有多個視頻設(shè)備需配置多條通道;③rvod,配置歷史視頻信息,有多個歷史視頻需配置多條記錄。
應(yīng)用服務(wù)程序配置文件具體內(nèi)容如下:


(5)OneNET云平臺提供視頻服務(wù)HTTP API接口,播放設(shè)備根據(jù)設(shè)備ID、API-Key可以獲取視頻通道信息。OneNET云平臺HTTP接口-獲取通信信息見表1所列。

表1 OneNET云平臺HTTP接口-獲取通信信息
OneNET云平臺HTTP接口-獲取通信信息實例如下:


(6)播放設(shè)備根據(jù)設(shè)備ID、API-Key和視頻通道ID發(fā)送直播命令,獲取的實時拉流地址和accessToken見表2所列。

表2 OneNET云平臺HTTP接口-實時拉流地址和accessToken
OneNET云平臺HTTP接口-實時拉流地址和accessToken實例如下:

(7)播放設(shè)備根據(jù)拉流地址發(fā)起直播請求。具體格式說明見表3所列。

表3 播放設(shè)備直播URL格式
播放設(shè)備直播URL實例如下:

One NET提供的視頻接收服務(wù)器的RTMPURL實例如下:

市場上的視頻設(shè)備不能直接接入OneNET云平臺,須通過應(yīng)用服務(wù)程序接入。應(yīng)用服務(wù)程序需支持的協(xié)議如下:
(1)支持ONVIF協(xié)議,通過該協(xié)議與視頻設(shè)備通信,獲取視頻設(shè)備能力信息。
(2)支持RTSP/RTP/RTCP/SDP等協(xié)議,從ONVIF設(shè)備服務(wù)器獲取音視頻數(shù)據(jù)。
(3)支持OneNET視頻協(xié)議:①在云平臺上添加視頻設(shè)備、視頻通道;②解析云平臺下發(fā)的命令;③將從ONVIF設(shè)備服務(wù)器接收到的音視頻數(shù)據(jù)以RTMP協(xié)議重新封裝,發(fā)給云平臺。
應(yīng)用服務(wù)程序采用多線程實現(xiàn),整個程序包含三個線程:主線程、接收線程、直播線程。主線程負責初始化工作,讀取配置文件;與ONVIF設(shè)備服務(wù)器建立連接,獲取設(shè)備及音視頻信息,創(chuàng)建接收線程;與云平臺建立連接,在云平臺上創(chuàng)建虛擬設(shè)備及通道;與云平臺保持長連接,接收云平臺下發(fā)的命令,并做出相應(yīng)的響應(yīng),若是視頻直播命令,則創(chuàng)建直播線程。接收線程和直播線程之間用緩沖隊列通信,接收線程是生產(chǎn)者,以RTSP/RTP/RTCP/SDP等協(xié)議與ONVIF設(shè)備服務(wù)器通信,獲取實時音視頻數(shù)據(jù),將音視頻數(shù)據(jù)送入緩沖隊列;直播線程是消費者,從緩沖隊列中獲取數(shù)據(jù),封裝成RTMP協(xié)議格式發(fā)送給云平臺。應(yīng)用服務(wù)程序主線程流程如圖3所示。

圖3 應(yīng)用服務(wù)程序主線程流程
開啟網(wǎng)絡(luò)攝像頭和應(yīng)用服務(wù)程序,登錄OneNET主頁,進入產(chǎn)品頁面,找到視頻通道,點擊實時視頻,即可看到攝像頭內(nèi)容。OneNET上的視頻設(shè)備和通道以及視頻直播效果分別如圖4和圖5所示。

圖4 OneNET上的視頻設(shè)備和通道

圖5 視頻直播效果圖
視頻數(shù)據(jù)能提供豐富的信息,網(wǎng)絡(luò)視頻設(shè)備在生活中也已經(jīng)非常普遍,如何在現(xiàn)有條件下不需要更換設(shè)備即可將視頻設(shè)備接入物聯(lián)網(wǎng)是一個有較高實用價值的課題。本文通過分析OneNET視頻通信流程及通信協(xié)議,設(shè)計應(yīng)用服務(wù)器,以較小成本實現(xiàn)視頻設(shè)備接入物聯(lián)網(wǎng),以期為用戶提供更為豐富的信息和更好的體驗。