張巍巍
摘要:為避免重復(fù)建設(shè),國家頒布了GB/T-28181標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)承載于SIP協(xié)議之上,規(guī)定了城市監(jiān)控聯(lián)網(wǎng)系統(tǒng)中信息傳輸、交換、控制的互聯(lián)結(jié)構(gòu)。未來平安城市視頻綜合系統(tǒng)中的視頻實(shí)時(shí)點(diǎn)播、回放下載、控制等操作將全部經(jīng)由SIP信令服務(wù)器交互完成。該文依據(jù)GB/T-28181的標(biāo)準(zhǔn),論述了一個(gè)基于開源的oSIP協(xié)議棧的SIP信令服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)。其支持標(biāo)準(zhǔn)規(guī)定的通訊流程,可滿足多級(jí)平臺(tái)間的級(jí)聯(lián)控制需求,具有良好的性能和可擴(kuò)展性。
關(guān)鍵詞:GB/T-28181;SIP;SDP;oSIP;信令服務(wù)器
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)33-0043-03
Abstract:To avoid duplication of construction, the state promulgated the GB/T-28181 standard. The standard is carried on the SIP protocol, and it specifies the interconnection structure of information transmission, exchange and control in the urban monitoring and networking system. Real-time play, playback, download, control and so on in the future safe city video integrated system will be completed by the SIP signaling server. Based on the standard of GB/T-28181, this paper discusses the design and implementation of a SIP signaling server Based on open source oSIP protocol stack. It supports the standard communication process, and can satisfy the cascade control requirements of multi-level platforms, and has good performance and scalability.
Key words:GB/T-28181; SIP;SDP;oSIP;Signaling Server
近十年間,各地都在快速推廣實(shí)施平安城市的建設(shè),為公安的業(yè)務(wù)提供便利和有效的技術(shù)手段。其他社會(huì)各個(gè)行業(yè),也積極通過安防視頻監(jiān)控系統(tǒng),提高管理水平,降低管理成本。這其中存在一個(gè)突出的矛盾,就是視頻綜合系統(tǒng)容易為設(shè)備廠商所綁架,升級(jí)困難。原因就在于視頻監(jiān)控廠商之間各自有自己獨(dú)立的實(shí)現(xiàn)方式,不同廠商設(shè)備間無法正常通信。因此國家頒布了GB/T-28181標(biāo)準(zhǔn),作為國內(nèi)安防、監(jiān)控行業(yè)的規(guī)范。這樣不但有利于提高終端廠商之間的競爭性,也為相關(guān)系統(tǒng)的升級(jí)改造提供了極大的便利。
國標(biāo)28181基于SIP架構(gòu),SIP是一個(gè)文本會(huì)話式的應(yīng)用層控制協(xié)議,其獨(dú)立于底層傳輸協(xié)議TCP/UDP/SCTP,因此具備良好的可擴(kuò)展性。oSIP按照RFC3261(SIP)和RFC2327(SDP)標(biāo)準(zhǔn),使用標(biāo)準(zhǔn)C實(shí)現(xiàn)了一個(gè)簡單小巧的SIP協(xié)議棧,其源碼完全開放,便于用戶裁剪、定制。由于其不提供高層的會(huì)話控制功能,主要提供一些解析SIP/SDP消息的API和事務(wù)處理的狀態(tài)機(jī),所以非常靈活。目前在各種SIP應(yīng)用中被廣為采用。本文主要介紹基于oSIP的SIP信令服務(wù)器設(shè)計(jì)。
1 oSIP協(xié)議棧
oSIP協(xié)議棧由三大模塊構(gòu)成,如圖1所示。
解析器模塊提供了豐富的API,便于用戶對(duì)SIP/SDP消息結(jié)構(gòu)及URL結(jié)構(gòu)的解析,使用戶能專注于業(yè)務(wù)本身。工具模塊提供對(duì)SDP協(xié)商及會(huì)話管理的工具。oSIP的核心是態(tài)機(jī)模塊,通過狀態(tài)機(jī)完成對(duì)特定事務(wù)的狀態(tài)記錄,且能在特定狀態(tài)下觸發(fā)相關(guān)事件或回調(diào)函數(shù)。其一共分為4個(gè)狀態(tài)機(jī),ICT/IST為一對(duì)連接,分別負(fù)責(zé)INVITE事件的客戶端和服務(wù)端處理,NICT/NIST負(fù)責(zé)對(duì)非INVITE事件的客戶端和服務(wù)端處理。圖2是一個(gè)INVITE事件的狀態(tài)機(jī)流程。
由于28181規(guī)定的媒體呼叫流程涉及多方協(xié)商,故對(duì)于單一事務(wù)而言,其事務(wù)的流程會(huì)更加復(fù)雜。所以本文論述的系統(tǒng)主要借助于通過oSIP完成對(duì)SIP端口的監(jiān)聽、發(fā)送以及相關(guān)SIP信令和SDP的解析,媒體點(diǎn)播的事務(wù)狀態(tài)維護(hù)由系統(tǒng)定義的狀態(tài)機(jī)負(fù)責(zé)完成。
2 系統(tǒng)架構(gòu)
根據(jù)GB28181的規(guī)范要求,SIP信令服務(wù)器應(yīng)至少提供用戶注冊(cè)和呼叫代理以及SIP消息轉(zhuǎn)發(fā)等功能。故整個(gè)信令服務(wù)器由3大邏輯實(shí)體構(gòu)成:注冊(cè)服務(wù)器、背靠背用戶代理服務(wù)器和代理服務(wù)器。所有來自IP網(wǎng)絡(luò)的SIP信令統(tǒng)一由信令解析模塊進(jìn)行相應(yīng)的解析封裝,打包成系統(tǒng)內(nèi)部的消息格式,發(fā)送至不同的邏輯實(shí)體。整個(gè)系統(tǒng)的架構(gòu)圖如圖3示。
2.1 注冊(cè)服務(wù)器
注冊(cè)服務(wù)器負(fù)責(zé)管理所有本地域中的設(shè)備信息,包括下級(jí)平臺(tái)的注冊(cè)信息。接收各終端設(shè)備及下級(jí)平臺(tái)的注冊(cè)請(qǐng)求,且負(fù)責(zé)向上級(jí)平臺(tái)發(fā)起注冊(cè)。其訪問數(shù)據(jù)庫確認(rèn)注冊(cè)權(quán)限,更新數(shù)據(jù)庫中設(shè)備及平臺(tái)相關(guān)注冊(cè)信息。其主要包含3大模塊:
1) 配置管理
從數(shù)據(jù)庫讀取系統(tǒng)的各種配置信息;包括系統(tǒng)啟動(dòng)配置、前端設(shè)備配置、流媒體服務(wù)器配置、本地SIP域上下級(jí)平臺(tái)的級(jí)聯(lián)配置等;可以基于數(shù)據(jù)庫的觸發(fā)器完成對(duì)配置的運(yùn)行時(shí)修改。
2) 設(shè)備管理
用于管理所有向信令服務(wù)器注冊(cè)成功的設(shè)備,監(jiān)聽其心跳包,處理設(shè)備斷線,以及設(shè)備注銷;設(shè)備管理器擁有獨(dú)立的定時(shí)器,每一個(gè)時(shí)隙會(huì)對(duì)當(dāng)前設(shè)備池中進(jìn)行輪巡統(tǒng)計(jì),由心跳包時(shí)間間隔判定設(shè)備是否掉線,以觸發(fā)相應(yīng)的斷線處理。
3) 通道管理
用于管理所有已注冊(cè)NVR所掛載的通道列表。GB28181標(biāo)準(zhǔn)中,媒體流的點(diǎn)播以通道為基本元素;對(duì)于掛載于NVR之上的IPC設(shè)備,其無需向信令服務(wù)器注冊(cè),可根據(jù)其掛載NVR的通道號(hào)獲取其媒體流信息;通道管理負(fù)責(zé)根據(jù)指定通道號(hào)查詢其附著的NVR地址信息,以實(shí)現(xiàn)SIP INVITE媒體流發(fā)送者的正確派送。
4) 數(shù)據(jù)庫管理
根據(jù)設(shè)備在線狀態(tài),更新數(shù)據(jù)庫,響應(yīng)數(shù)據(jù)庫的觸發(fā)器,動(dòng)態(tài)更新本地配置。Web端的展示可直接訪問數(shù)據(jù)庫,以降低模塊間的耦合度。
2.2 背靠背用戶代理服務(wù)器
該邏輯實(shí)體是信令服務(wù)器的核心,主要負(fù)責(zé)接收客戶端的媒體點(diǎn)播請(qǐng)求。以第三方呼叫控制的方式在客戶端、流媒體及前端設(shè)備間進(jìn)行協(xié)商,建立會(huì)話連接。以狀態(tài)機(jī)的方式維護(hù)會(huì)話相關(guān)的事務(wù)信息,保證SIP信令和RTP媒體流傳輸?shù)恼_性。其主要包含3大模塊:
1) 會(huì)話管理模塊
對(duì)于每一個(gè)INVITE請(qǐng)求,會(huì)話管理模塊會(huì)創(chuàng)建一個(gè)Session會(huì)話用以保存該INVITE請(qǐng)求的上下文;當(dāng)需要對(duì)INVITE類相關(guān)的SIP信令進(jìn)行處理時(shí),會(huì)話管理模塊首先根據(jù)會(huì)話ID查找到指定的Session,具體的事務(wù)流程交由會(huì)話事務(wù)模塊執(zhí)行。
2) 會(huì)話事務(wù)模塊
其核心是會(huì)話的狀態(tài)機(jī),當(dāng)事務(wù)處于不同的狀態(tài)時(shí),收到不同的響應(yīng)信令,應(yīng)該執(zhí)行如何的動(dòng)作,統(tǒng)一交由會(huì)話狀態(tài)機(jī)來管理維護(hù)。
3) 負(fù)載均衡模塊
當(dāng)信令服務(wù)器需向流媒體發(fā)起視頻流請(qǐng)求時(shí),需考慮多個(gè)流媒體服務(wù)器當(dāng)前的負(fù)載情況??删C合考量當(dāng)前已注冊(cè)的流媒體服務(wù)器的CPU、內(nèi)存、硬盤及網(wǎng)絡(luò)使用情況,向負(fù)載最輕的流媒體發(fā)起INVITE邀請(qǐng);流媒體服務(wù)器的系統(tǒng)信息可以通過私有協(xié)議通知信令服務(wù)器,也可直接承載于SIP協(xié)議。
2.3 代理服務(wù)器
主要負(fù)責(zé)消息轉(zhuǎn)發(fā),對(duì)前端設(shè)備的云臺(tái)控制,報(bào)警響應(yīng)等可經(jīng)由此模塊處理。客戶端對(duì)前端設(shè)備的控制請(qǐng)求信令,經(jīng)由代理服務(wù)器發(fā)送至前端設(shè)備,再轉(zhuǎn)發(fā)前端設(shè)備的控制響應(yīng)信令至客戶端。另外通過代理服務(wù)器可在上下級(jí)平臺(tái)間傳輸信令,用以實(shí)現(xiàn)級(jí)聯(lián)控制需求。
2.4 通訊協(xié)議結(jié)構(gòu)
SIP信令的協(xié)商,消息體內(nèi)容主要攜帶有SDP(會(huì)話描述協(xié)議)信息,MANSCDP(監(jiān)控報(bào)警聯(lián)網(wǎng)系統(tǒng)控制描述協(xié)議)信息,以及MANSRTSP(監(jiān)控報(bào)警聯(lián)網(wǎng)系統(tǒng)實(shí)時(shí)流協(xié)議)信息。SDP用于媒體的協(xié)商與設(shè)備的控制。對(duì)于媒體流來說,主要經(jīng)過視頻原始流打包成RTP數(shù)據(jù)包經(jīng)由流媒體服務(wù)器送至媒體流接收者。其視頻流格式支持MPEG-4/H.264等,封裝格式規(guī)定為Program Stream(程序流)。MANSCDP用于聯(lián)網(wǎng)系統(tǒng)的控制、查詢、通知、響應(yīng)等操作;MANSRTSP命令實(shí)現(xiàn)對(duì)視頻、音頻流的播放、快進(jìn)、暫停、停止、隨機(jī)拖放等遠(yuǎn)程控制。
3 核心模塊實(shí)現(xiàn)
本系統(tǒng)基于消息隊(duì)列機(jī)制實(shí)現(xiàn)多進(jìn)程多線程間的異步通信。每個(gè)功能模塊都擁有各自獨(dú)立的消息隊(duì)列。模塊間通信的統(tǒng)一消息格式定義如下:
typedefstruct {
unsignedintmsgId;
unsignedint length;
char* data;
}tMsg;
任務(wù)間的通信根據(jù)不同的信令類型定義不同的消息ID以及消息數(shù)據(jù)結(jié)構(gòu)。
3.1 信令解析
SIP信令的監(jiān)聽由oSIP協(xié)議棧負(fù)責(zé),當(dāng)收到合法的SIP信令后,oSIP會(huì)觸發(fā)相應(yīng)的事件,使用方法如下:
eXosip_event_t *event = eXosip_event_wait(0, 200);
當(dāng)協(xié)議棧接收到外部事件后,會(huì)構(gòu)造本地消息將其寫入信令解析模塊的消息隊(duì)列。由解析線程從隊(duì)列中取出消息,根據(jù)不同的信令類型,構(gòu)造合適的消ID、數(shù)據(jù)結(jié)構(gòu),寫入對(duì)應(yīng)模塊的消息隊(duì)列。消息主要分三類:注冊(cè)相關(guān)類,INVITE相關(guān)類以及MESSAGE相關(guān)類。分別對(duì)應(yīng)三個(gè)不用的邏輯實(shí)體。
3.2 設(shè)備管理
由于本地SIP域中的設(shè)備數(shù)量可能會(huì)很多,系統(tǒng)為了實(shí)現(xiàn)設(shè)備狀態(tài)的維護(hù),心跳包的監(jiān)測,為每一個(gè)已注冊(cè)的設(shè)備分配空間保存上下文。為了避免由于設(shè)備頻繁注冊(cè)注銷導(dǎo)致的內(nèi)存顛簸問題,也為了快速便捷的實(shí)現(xiàn)設(shè)備輪巡,采用內(nèi)存池的技術(shù)管理所有設(shè)備。每次分配指定大小的內(nèi)存塊,每一個(gè)內(nèi)存塊可保存固定數(shù)量的設(shè)備信息。若已分配內(nèi)存塊使用完畢,則重新申請(qǐng)?jiān)黾有碌膬?nèi)存塊,以此來提高效率。為了方便對(duì)內(nèi)存池中的所有對(duì)象進(jìn)行遍歷,需要支持相關(guān)的游標(biāo)遍歷。
設(shè)備注冊(cè)成功后,信令服務(wù)器負(fù)責(zé)監(jiān)測其在線狀態(tài)。引入心跳監(jiān)測模塊,該模塊定時(shí)向已注冊(cè)設(shè)備發(fā)送心跳包,收到設(shè)備響應(yīng)后,更新設(shè)備狀態(tài)上下文。為了從全局統(tǒng)計(jì)所有設(shè)備的在線狀態(tài),引入兩個(gè)定時(shí)器完成設(shè)備輪巡。設(shè)備輪巡啟動(dòng)后,會(huì)觸發(fā)定時(shí)器A,該定時(shí)器超時(shí)后進(jìn)行輪巡處理;由于設(shè)備數(shù)量不定,可配置每次輪巡統(tǒng)計(jì)的最大設(shè)備數(shù)。若本次統(tǒng)計(jì)未能完成對(duì)設(shè)備池中所有設(shè)備的統(tǒng)計(jì),則啟動(dòng)定時(shí)器B,該定時(shí)器超時(shí)后通知設(shè)備管理繼續(xù)上一次的輪巡統(tǒng)計(jì)。統(tǒng)計(jì)過程中,根據(jù)設(shè)備注冊(cè)時(shí)間戳、心跳時(shí)間戳與當(dāng)前服務(wù)器本地時(shí)間戳的比對(duì),判斷該設(shè)備是否處于超時(shí)狀態(tài);如果判斷設(shè)備已超時(shí),則從設(shè)備管理器的哈希表中刪除指定編碼設(shè)備的設(shè)備池ID映射,從設(shè)備池中刪除指定設(shè)備;同時(shí)更新數(shù)據(jù)庫。
3.3 會(huì)話狀態(tài)機(jī)
GB28181中,視頻請(qǐng)求經(jīng)由信令服務(wù)器對(duì)流媒體和前端設(shè)備進(jìn)行SDP協(xié)商后,將RTP流送至客戶端。協(xié)商過程中,會(huì)話會(huì)存在多個(gè)狀態(tài),如等待流媒體響應(yīng),等待前端設(shè)備響應(yīng),等待客戶端ACK等。
其狀態(tài)機(jī)變遷流程如下圖所示:
當(dāng)會(huì)話在指定狀態(tài)收到錯(cuò)誤響應(yīng)或無響應(yīng)時(shí)均進(jìn)入終結(jié)狀態(tài),統(tǒng)一交由錯(cuò)誤處理模塊進(jìn)行相應(yīng)的資源釋放和日志記錄。
狀態(tài)機(jī)的定義如下:
typedefStateMachine
對(duì)于不同的狀態(tài),狀態(tài)機(jī)會(huì)獲取當(dāng)前狀態(tài)的操作指針,回調(diào)給狀態(tài)機(jī)使用者;極大增強(qiáng)了代碼的清晰度,避免了繁瑣的大量if/else判斷。
4 級(jí)聯(lián)點(diǎn)播
為了方便SIP平臺(tái)間的互聯(lián)互通,信令服務(wù)器支持級(jí)聯(lián)點(diǎn)播。對(duì)上級(jí)信令服務(wù)器而言,下級(jí)信令服務(wù)器相當(dāng)于前端設(shè)備;對(duì)下級(jí)信令服務(wù)器而言,上級(jí)信令服務(wù)器相當(dāng)于客戶端;如此經(jīng)過協(xié)商,下級(jí)平臺(tái)的流媒體將設(shè)備媒體流送至上級(jí)平臺(tái)的流媒體服務(wù)器,最終由上級(jí)流媒體服務(wù)器將設(shè)備媒體流送至上級(jí)平臺(tái)客戶端。傳輸都經(jīng)由信令安全路由網(wǎng)關(guān),由此保證網(wǎng)絡(luò)的安全性。
其信令交互流程如下圖所示:
5 結(jié)束語
隨著視頻監(jiān)控的不斷普及,可預(yù)見未來各行業(yè)會(huì)逐步加大對(duì)視頻綜合系統(tǒng)的投入,各系統(tǒng)間的聯(lián)網(wǎng)也會(huì)逐步成為可能。本文設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)基于oSIP協(xié)議棧的信令服務(wù)器,符合GB28181的標(biāo)準(zhǔn)規(guī)范,并在規(guī)范要求的基礎(chǔ)上做出了一些優(yōu)化,重點(diǎn)論述了部分模塊的實(shí)現(xiàn)方式,為日后基于SIP協(xié)議的相關(guān)服務(wù)端程序設(shè)計(jì),提供了借鑒思路。
參考文獻(xiàn):
[1] GB-T 28181-2011 安全防范視頻監(jiān)控聯(lián)網(wǎng)系統(tǒng)信息傳輸、交互、控制技術(shù)要求[S].
[2] oSIP開發(fā)者手冊(cè),作者:ArmericMoizard版本保護(hù):GNU Free Document License 文獻(xiàn)地址:http://osip.actosc.org
[3] 王爽,廉東本,康弘楠.基于SIP的中心信令控制服務(wù)器的實(shí)現(xiàn)與應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2014(3).
[4] 姚田文.基于GB/T28181標(biāo)準(zhǔn)的視頻監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].浙江大學(xué),2016.