姚嚴(yán)峰,劉國輝
(武漢郵電科學(xué)研究院湖北武漢470030)
基于Onvif協(xié)議的視頻監(jiān)控對等網(wǎng)絡(luò)庫的設(shè)計
姚嚴(yán)峰,劉國輝
(武漢郵電科學(xué)研究院湖北武漢470030)
為了實現(xiàn)視頻監(jiān)控系統(tǒng)中遠程傳輸音頻、視頻更加穩(wěn)定、流暢的需求,提出了一套更加合理的選擇和實現(xiàn)TCP、UDP連接的設(shè)計方案,并完成系統(tǒng)的軟件實現(xiàn)。通過測試工具進行連接方式測試,并將它放在視頻監(jiān)控系統(tǒng)里試驗遠程傳輸視頻、音頻的畫面,得出了對等網(wǎng)絡(luò)庫可以準(zhǔn)確選擇連接方式、畫面聲音質(zhì)量穩(wěn)定、播放流暢的特點,達到了設(shè)計要求。
視頻監(jiān)控;設(shè)計;對等網(wǎng)絡(luò)庫;視頻;音頻
隨著流媒體技術(shù)、網(wǎng)絡(luò)技術(shù)的發(fā)展以及相關(guān)傳輸協(xié)議、視頻編碼標(biāo)準(zhǔn)的成熟[1],視頻監(jiān)控系統(tǒng)已由最初的模擬視頻監(jiān)控系統(tǒng)階段發(fā)展到了網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)階段,采用流媒體傳輸技術(shù)的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)因其具有視頻數(shù)字化、監(jiān)控網(wǎng)絡(luò)化和控制智能化等特點而成為當(dāng)前視頻監(jiān)控領(lǐng)域研究的熱點。由于流媒體對IP網(wǎng)絡(luò)的QoS有較高的要求,而IP網(wǎng)絡(luò)的結(jié)構(gòu)特點決定了其不能提供足夠的網(wǎng)絡(luò)帶寬、較小的網(wǎng)絡(luò)延時和較低的丟包率,所以流媒體和IP網(wǎng)絡(luò)在QoS方面的矛盾影響了流媒體在IP網(wǎng)絡(luò)上的應(yīng)用效果[2]。
對等網(wǎng)絡(luò)流媒體系統(tǒng)的低消耗和高可擴展性很好的解決了傳統(tǒng)流媒體系統(tǒng)中服務(wù)器和網(wǎng)絡(luò)的高壓力問題,使得為用戶提供高質(zhì)量網(wǎng)絡(luò)視頻服務(wù)成為可能。在隨機的拓撲結(jié)構(gòu)中,由于鄰居選擇的隨機性和不確定性,使得網(wǎng)絡(luò)系統(tǒng)中存在主干網(wǎng)絡(luò)壓力大、啟動延遲和播放延遲長以及幀丟失率高等問題[3]。
當(dāng)IE插件客戶端需要獲取外網(wǎng)設(shè)備的數(shù)據(jù)時,網(wǎng)絡(luò)庫模塊會調(diào)用對等網(wǎng)絡(luò)庫,具體流程如圖1所示。
圖1 客戶端網(wǎng)絡(luò)庫對對等網(wǎng)絡(luò)庫調(diào)用流程圖Fig.1Client network library on peer to peer network library call flow chart
在登錄以太網(wǎng)上的NVR設(shè)備時,客戶端需要知道設(shè)備的ID標(biāo)識符和擁有登錄設(shè)備的權(quán)限,向P2P總服務(wù)器發(fā)送請求信息,總服務(wù)器收到請求信息后,通過查詢數(shù)據(jù)庫,向客戶端反饋服務(wù)器列表信息,客戶端分析服務(wù)器列表信息,向設(shè)備注冊的服務(wù)器發(fā)送設(shè)備的登錄信息請求,次級服務(wù)器收到登錄信息請求后,向客戶端反饋設(shè)備的登錄信息,客戶端根據(jù)設(shè)備反饋的登錄信息選擇合適的連接方式嘗試登錄,登錄成功后,客戶端和設(shè)備之間就可以傳輸視頻數(shù)據(jù)、音頻數(shù)據(jù)和用戶數(shù)據(jù),從而達到用戶在客戶端操控設(shè)備的目的。
2.1向服務(wù)器請求目標(biāo)設(shè)備的信息
獲取p2p服務(wù)器列表,列表服務(wù)器:p2pserverlist.dddns.org,端口:6663,該服務(wù)器支持tcp和udp連接,tcp和udp端口相同。消息IDP2P_MSG_GET_SERVER_LIST=1015,該消息只有頭部,不帶消息體。服務(wù)器回復(fù)當(dāng)前p2p的服務(wù)器列表,該回復(fù)消息id依舊是1015,回復(fù)消息由p2p的頭部和xml數(shù)據(jù)構(gòu)成,xml數(shù)據(jù)中包含當(dāng)前服務(wù)器的數(shù)量(server_cnt),每個服務(wù)器的域名(server_dn)與端口(server_port)。
獲取目標(biāo)設(shè)備信息,新版本添加了多服務(wù)器支持之后,設(shè)備會向就近的服務(wù)器進行注冊,當(dāng)服務(wù)器出現(xiàn)故障時,設(shè)備也會自動切換到工作正常的服務(wù)器,在獲取目標(biāo)設(shè)備信息時,需要向第2步獲取到的所有服務(wù)器列表發(fā)送獲取目標(biāo)設(shè)備信息的請求,服務(wù)器的回復(fù)可能有3種情況:設(shè)備不存在,設(shè)備不在線,成功。取返回成功的服務(wù)器的數(shù)據(jù)作為連接設(shè)備的信息。服務(wù)器都支持tcp和udp連接,獲取目標(biāo)設(shè)備信息可以通過tcp發(fā)送,也可以通過udp發(fā)送,為了提高連接速度,客戶端應(yīng)同時向服務(wù)器群請求數(shù)據(jù),而避免依次請求,導(dǎo)致連接時間過長。
圖2 對等網(wǎng)絡(luò)庫通信流程概圖Fig.2Peer to peer network library communication process overview
2.2連接目標(biāo)設(shè)備
P2P服務(wù)器返回節(jié)點信息,返回信息中包括如下內(nèi)容:設(shè)備是否在線,是否嘗試使用lan連接,通過tcp是直連還是非直連,是否嘗試使用udp連接。連接嘗試的順序為:
1)私網(wǎng)地址局域網(wǎng)直連(如果try_lan==1);
2)公網(wǎng)地址廣域網(wǎng)tcp直連(如果connect_direct==1);
3)廣域網(wǎng)udp直連(如果try_udp==1,并且直連udp hello完成);
4)廣域網(wǎng)udp轉(zhuǎn)發(fā)(如果try_udp==1,并且非直連udp hello完成);
5)廣域網(wǎng)tcp轉(zhuǎn)發(fā)(如果connect_direct==0)。
根據(jù)服務(wù)器反饋的信息,客戶端進行不同的處理[1],如果設(shè)備不在線,提示登陸失敗,設(shè)備不在線,并向服務(wù)器報告連接結(jié)果,連接過程終結(jié);否則進入下一步。
如果try_lan的值為1,客戶端應(yīng)使用局域網(wǎng)地址(target_ip_lan)和p2p端口(target_port)進行tcp連接嘗試,否則跳入下一步。連接流程如下:
1)和目標(biāo)設(shè)備建立tcp連接;
2)發(fā)送bind請求進行綁定,bind的請求的to_uid應(yīng)填目標(biāo)設(shè)備的uid;
3)綁定成功即可使用直接使用p2p協(xié)議進行通信,通信時用戶數(shù)據(jù)應(yīng)添加p2p頭,然后再通過socket發(fā)送給目標(biāo)設(shè)備,p2p頭部中to_uid應(yīng)填寫目標(biāo)設(shè)備的uid,from_uid應(yīng)填客戶端的uid,to_port和from_port可以不用填,msg id應(yīng)填P2P_MSG_ID_USER;
4)當(dāng)客戶端和目標(biāo)設(shè)備連接成功之后,應(yīng)向服務(wù)器報告連接結(jié)果;
5)通信完成之后斷開socket連接;
6)連接過程終結(jié)。
如果connect_direct的值為1,客戶端應(yīng)使用目標(biāo)設(shè)備ip地址(target_ip)和p2p端口(target_port)進行tcp連接嘗試,否則跳入下一步。TCP連接流程如下,本流程和b流程基本一致,不一樣的地方在于b使用的目標(biāo)設(shè)備的私有ip,而本流程使用的是目標(biāo)設(shè)備的外網(wǎng)ip。
2.3與目標(biāo)設(shè)備建立TCP連接
如果connect_direct的值為1,客戶端應(yīng)使用目標(biāo)設(shè)備IP地址(target_ip)和p2p端口(target_port)進行TCP連接嘗試,否則跳入下一步。TCP連接流程如下,本流程和b流程基本一致,不一樣的地方在于b使用的目標(biāo)設(shè)備的私有IP,而本流程使用的是目標(biāo)設(shè)備的外網(wǎng)IP。
1)和目標(biāo)設(shè)備建立TCP連接;
2)發(fā)送bind請求進行綁定,bind的請求的to_uid應(yīng)填目標(biāo)設(shè)備的uid;
3)綁定成功即可使用直接使用p2p協(xié)議進行通信,通信時用戶數(shù)據(jù)應(yīng)添加p2p頭,然后再通過socket發(fā)送給目標(biāo)設(shè)備,p2p頭部中to_uid應(yīng)填寫目標(biāo)設(shè)備的uid,from_uid應(yīng)填客戶端的uid,to_port和from_port可以不用填,msg id應(yīng)填P2P_MSG_ID_USER;
4)當(dāng)客戶端和目標(biāo)設(shè)備連接成功之后,應(yīng)向服務(wù)器報告連接結(jié)果;
5)通信完成之后斷開socket連接;
6)連接過程終結(jié)。
如果try_udp的值為1,客戶端應(yīng)使用目標(biāo)設(shè)備ip地址(target_ip)和端口(target_port)進行UDP連接嘗試,否則跳入下一步。UDP連接流程如下,整個過程都必須通過UDP協(xié)議完成:
1)向服務(wù)器發(fā)送UDP連接請求(P2P_MSG_UDP_CONNE CT_REQUEST);
2)服務(wù)器返回目標(biāo)設(shè)備的UDP連接信(P2P_MSG_ UDP_CONNECT_RE PLY),同時還會提供最多10個UDP的轉(zhuǎn)發(fā)節(jié)點;
3)客戶端向目標(biāo)設(shè)備發(fā)送udp hello請求(P2P_MSG_ UDP_HELLO),發(fā)送請求應(yīng)每500 ms發(fā)送一個,連續(xù)發(fā)送5次;發(fā)送請求時,除了對目標(biāo)設(shè)備發(fā)送以外,還需要同時通過10個轉(zhuǎn)發(fā)節(jié)點發(fā)送連接請求,請求包p2p的頭部to_uid應(yīng)填寫目標(biāo)設(shè)備的uid,udp_ip和udp_port應(yīng)填寫目標(biāo)設(shè)備的外網(wǎng)ip和p2p端口。在接收到目標(biāo)設(shè)備的回復(fù)之后,客戶端應(yīng)記錄是否可以通過UDP直連,哪些轉(zhuǎn)發(fā)節(jié)點可以使用等信息;
4)連接請求設(shè)置超時時間5 s,如果在這5 s內(nèi)收到目標(biāo)設(shè)備的直連的udp hello包,則忽略轉(zhuǎn)發(fā)節(jié)點,進入UDP直連流程;
5)如果5 s內(nèi)沒有收到直連回復(fù),依據(jù)是否有收到轉(zhuǎn)發(fā)的udp hello消息,判斷能否使用轉(zhuǎn)發(fā)節(jié)點進行UDP連接;
6)如果沒有收到任何轉(zhuǎn)發(fā)節(jié)點的請求,則進行tcp轉(zhuǎn)發(fā)流程。
客戶端使用伙伴節(jié)點ip地址(parter_ip)和端口(parter_port)進行tcp連接嘗試,連接過程如下:
1)和伙伴節(jié)點建立TCP連接;
2)發(fā)送bind請求進行綁定,bind的請求的to_uid應(yīng)填伙伴節(jié)點的uid;
3)綁定成功即可使用p2p協(xié)議進行通信,通信時用戶數(shù)據(jù)應(yīng)添加p2p頭,然后再通過socket發(fā)送給伙伴節(jié)點,p2p頭部中to_uid應(yīng)填寫目標(biāo)設(shè)備的uid,from_uid應(yīng)填客戶端的uid,to_port和from_port可以不用填,msg id應(yīng)填P2P_MSG_ID_USER;
4)當(dāng)客戶端和目標(biāo)設(shè)備連接成功之后,應(yīng)向服務(wù)器報告連接結(jié)果;
5)通信完成之后斷開socket連接;
6)連接過程終結(jié)。
2.4UDP連接方式的改進設(shè)計
由于UDP連接的不可靠特點,和視頻數(shù)據(jù)傳輸特點,UDP傳輸一直不能達到理想效果,經(jīng)過努力對UDP通信方式作出改進,通信流程如下:PC向P2P服務(wù)器請求節(jié)點信息(P2P_MSG_GET_NODE_INFO),P2P服務(wù)器返回節(jié)點信息,返回信息中包括如下內(nèi)容:設(shè)備是否在線、是否嘗試使用lan連接、直連還是非直連、是否嘗試使用UDP連接。
根據(jù)服務(wù)器反饋的信息,客戶端進行不同的處理
1)如果設(shè)備不在線,提示登陸失敗,原因是設(shè)備不在線
2)如果try_lan=1,客戶端使用服務(wù)器返回的私有地址進行連接嘗試,如果成功,則進入正常工作,如果不成功,這進入下一步驟,局域網(wǎng)連接嘗試的超時時間設(shè)備2 s;
3)根據(jù)connect_direct的值判斷是否可以直連,如果是直連,原有的連接邏輯不變;
4)直接使用TCP進行直連;
5)如果非直連,判斷是否使用UDP連接(try_udp=1),UDP連接流程如下:
向服務(wù)器發(fā)送UDP連接請求(P2P_MSG_UDP_CONNECT _REQUEST),服務(wù)器返回對端設(shè)備的UDP連接信息(P2P_MSG_UDP_CONNECT_REPLY),同時還會提供最多10個UDP的轉(zhuǎn)發(fā)節(jié)點,同時服務(wù)器會通知目標(biāo)設(shè)備,并且會提供相同的UDP轉(zhuǎn)發(fā)節(jié)點信息,Pc向目標(biāo)設(shè)備發(fā)送UDP連接請求(P2P_MSG_UDP_HELLO),同時目標(biāo)設(shè)備也會向pc發(fā)送UDP連接請求,發(fā)送請求應(yīng)每500 ms發(fā)送一個,連續(xù)發(fā)送3次;同時通過10個轉(zhuǎn)發(fā)節(jié)點發(fā)送連接請求,接收端應(yīng)記錄可以使用的轉(zhuǎn)發(fā)節(jié)點以及連接速度等信息,連接請求設(shè)置超時時間5 s,如果在這5 s內(nèi)收到對端的直連請求,立即中斷連接請求等待,進入UDP直連流程,如果5 s內(nèi)沒有收到直連回復(fù),看是否有收到轉(zhuǎn)發(fā)連接請求,如果有收到,則使用轉(zhuǎn)發(fā)節(jié)點進行UDP連接,如果沒有收到任何轉(zhuǎn)發(fā)節(jié)點的請求,則進行TCP轉(zhuǎn)發(fā)流程。
6)如果是try_udp=0,直接進入TCP轉(zhuǎn)發(fā)流程。
當(dāng)客戶端向服務(wù)器發(fā)送連接請求之后,服務(wù)器會返回對端設(shè)備的信息和代理節(jié)點的信息,而且服務(wù)器會將這些信息通告到目標(biāo)設(shè)備,獲取到這些信息之后,客戶端和目標(biāo)設(shè)備應(yīng)同時向?qū)Χ税l(fā)送連接請求,以完成UDP打洞,同時需要通過代理節(jié)點發(fā)送連接請求,以確定可用的代理節(jié)點和代理節(jié)點的速度,以便后續(xù)使用UDP轉(zhuǎn)發(fā)時優(yōu)化連接速度。UDP連接請求總時間設(shè)置5 s超時,如果5 s內(nèi)收到對端設(shè)備直連的UDP消息,說明UDP打洞已經(jīng)成功,可以通過UDP進行直連,這是立即中斷請求流程,直接進入下一環(huán)節(jié)。從服務(wù)器獲取到的代理節(jié)點也不再使用。如果5 s內(nèi)沒有收到直連請求,則只能選擇通過UDP代理的方式進行連接,如果也沒有收到任何UDP代理的請求消息,則跳出UDP連接過程。
進入UDP直連之后,和TCP直連不同之處在于需要處理亂序和丟包,這部分工作需要在p2p模塊中處理完成,以避免影響到上層應(yīng)用軟件。p2p接收模塊需建立一個收到數(shù)據(jù)包的隊列,將收到的數(shù)據(jù)包按照需要放入隊列,上層軟件獲取時,一次從隊列中取出數(shù)據(jù)。
UDP轉(zhuǎn)發(fā)過程中最核心的內(nèi)容是最有效的使用UDP的轉(zhuǎn)發(fā)節(jié)點,以最大化傳輸效率。每個轉(zhuǎn)發(fā)節(jié)點帶寬不同,并且穩(wěn)定性也不同,如果最有效的利用多個節(jié)點來進行轉(zhuǎn)發(fā)。
在整個數(shù)據(jù)發(fā)送過程中,設(shè)備端會定期通過所有轉(zhuǎn)發(fā)節(jié)點向客戶端發(fā)送UDP探測消息(P2P_MSG_UDP_ROUTE_ HEARTBEAT),客戶端收到探測消息,需要回復(fù),設(shè)備端更具收到的回復(fù)的速度選擇使用的轉(zhuǎn)發(fā)節(jié)點??蛻舳耸盏降臄?shù)據(jù)可能是從不同的轉(zhuǎn)發(fā)節(jié)點轉(zhuǎn)發(fā)過來的,數(shù)據(jù)的順序會被打亂,有可能后發(fā)的包先收到,也有可能丟包,客戶端需設(shè)置一個超時時間,對于媒體數(shù)據(jù),超時時間為3s,信令數(shù)據(jù),超時時間為5s,如果收到的后面的包并且超時時間到還沒有收到數(shù)據(jù),則認為前面發(fā)送的數(shù)據(jù)包已丟失。
p2p_tool是在windos環(huán)境下使用vc++基于mfc開發(fā)的,它以對等網(wǎng)絡(luò)庫為基礎(chǔ),不僅可以對網(wǎng)絡(luò)庫的穩(wěn)定性和實用性進行測試,還可以檢測相關(guān)網(wǎng)絡(luò)故障。測試工具界面如圖3所示。
為了操作方便測試工具被設(shè)計為對話框的形式[4],操作臺部分用來輸入要連接的NVR設(shè)備的設(shè)備ID,服務(wù)器列表部分顯示從主服務(wù)器獲取的服務(wù)器列表信息,連接信息部分顯示客戶端從設(shè)備注冊服務(wù)器獲取的設(shè)備連接信息[5],最后一部分顯示可用的連接方式及連接時間。
圖3 測試工具界面圖Fig.3The testing tool interface diagram
測試登陸的結(jié)果如圖4所示。
圖4 測試工具登錄信息圖Fig.4Test tools login information graph
在IE插件客戶端的實際使用過程中,對等網(wǎng)絡(luò)庫的其他幾種連接方式,都能很好的完成通信任務(wù),精確的傳輸用戶數(shù)據(jù)和視頻數(shù)據(jù),保證預(yù)覽和回放視頻畫面的流暢和穩(wěn)定。
該對等網(wǎng)絡(luò)庫采用更為合理的通信模式[6],軟件設(shè)計采用模塊化設(shè)計思想,提高了系統(tǒng)的可靠性和維護性。該對等網(wǎng)絡(luò)庫已經(jīng)應(yīng)用于視頻監(jiān)控系統(tǒng)進行試用[7],實際應(yīng)用表明該對等網(wǎng)絡(luò)庫可以準(zhǔn)確的選擇連接方式,穩(wěn)定流暢的遠程傳輸A/V文件,達到了設(shè)計的目的。
[1]鄭俊飛.軌道交通車地寬帶視頻監(jiān)控系統(tǒng)的研究[D].南昌:南昌航空大學(xué),2012.
[2]何浩.基于H.264的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[D].長沙:湖南大學(xué),2009.
[3]張秀玲.視頻監(jiān)控系統(tǒng)研究現(xiàn)狀與發(fā)展趨勢[J].科技信息(學(xué)術(shù)版),2008(2):129-133. ZHANG Xiu-ling.Research status and development trend of video surveillance systems[J].Science and Technology Information(Academic Edition),2008(2):129-133.
[4]董向化,楊勇.基于網(wǎng)絡(luò)的視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[J].通信技術(shù),2013(2):64-66. DONG Xing-hua,YANG Yong.Design and implementation of network video surveillance system based on ommunication technology,2013(2):64-66.
[5]秦培龍.基于ARM的嵌入式視頻服務(wù)器設(shè)計與實現(xiàn)[D].北京:中國民航大學(xué),2008.
[6]馬留英.基于3G移動通信的視頻監(jiān)控系統(tǒng)研究[D].西安:長安大學(xué),2011.
[7]沈傳兵,白文浩,崔海,等.動力系統(tǒng)試驗工藝參數(shù)監(jiān)視系統(tǒng)設(shè)計[J].火箭推進,2014(4):73-76. SHEN Chuan-bing,BAI Wen-hao,CUI Hai,et al.Design of process parameter monitoring system for rocket propulsion system test[J].Journal of Rocket Propulsion,2014(4):73-76.
Design of network video surveillance client's peer to peer network library based on Onvif
YAO Yan-feng,LIU Guo-hui
(Wuhan Research Institute of Posts and Telecommunications,Wuhan 470030,China)
In order to realize the remote transmission of audio and video in Video surveillance system more stable and smooth,put forward a set of more reasonable selection and implementation of TCP and UDP connection design,and implement the software of the system.Test connection style by test tools,and put it in the video monitoring system in the test of remote transmission of video and audio picture,obtained the peer to peer network library can be accurately select the connection mode,signal of video and audio quality is stable,can be smoothly play,and achieve the design requirements.
video surveillance system;design;peer to peer network library;audio;video
TN919.82
A
1674-6236(2015)20-0075-04
2014-12-24稿件編號:201412233
姚嚴(yán)峰(1987—),男,河南洛陽人,碩士。研究方向:通信與信息系統(tǒng)、物聯(lián)網(wǎng)。