楊豐瑞,蔣培健,張杰,
(1.重慶重郵信科(集團)股份有限公司,重慶 400065;2.重慶郵電大學 通信新技術(shù)應用研究所,重慶 400065;3.重慶郵電大學 重慶信科設(shè)計有限公司,重慶 400065)
隨著技術(shù)的進步和應用的需求,視頻監(jiān)控已經(jīng)服務于各個行業(yè)。視頻監(jiān)控經(jīng)歷了模擬視頻監(jiān)控到數(shù)字視頻監(jiān)控,再到遠程網(wǎng)絡視頻監(jiān)控幾個階段,它正朝著數(shù)字化、網(wǎng)絡化、智能化、多媒體化的方向發(fā)展[1]。本系統(tǒng)由服務端和客戶端兩部分組成,服務端采用達芬奇系列DM6467,它采用ARM+DSP雙核結(jié)構(gòu),采用嵌入式Linux操作系統(tǒng),能夠同時支持8路D1和1路高清視頻,主要完成視頻壓縮編碼,網(wǎng)絡傳輸,及相關(guān)控制等功能;客戶端基于Windows系統(tǒng),VC++開發(fā),完成對視頻碼流的接收、管理、存儲、解碼和播放等功能。無線模塊采用TD-SCDMA制式的TDM330無線網(wǎng)卡。
目前,視頻監(jiān)控系統(tǒng)的主流技術(shù)標準有2個:H.323和SIP。H.323的視頻系統(tǒng)目前已經(jīng)比較成熟,但由于其體系結(jié)構(gòu)龐大且較為復雜,限制了其在中小企業(yè)的部署。SIP以其簡潔、靈活、易于實現(xiàn)和擴展等特性而迅速得到業(yè)界的推崇。不同架構(gòu)的監(jiān)控系統(tǒng)在數(shù)據(jù)互聯(lián)和共享的時候會遇到控制信令不統(tǒng)一的問題,不同信令實現(xiàn)的監(jiān)控端、客戶端與系統(tǒng)無法互聯(lián),有效的手段就是采用統(tǒng)一規(guī)范的信令控制協(xié)議。SIP協(xié)議就是這樣一種信令控制協(xié)議,只要監(jiān)控系統(tǒng)的各個單元都用它做信令控制,整個系統(tǒng)就能實現(xiàn)統(tǒng)一的信令交互[2]。在視頻監(jiān)控行業(yè),將SIP作為其系統(tǒng)的控制信令已經(jīng)慢慢成為共識。本系統(tǒng)就是用SIP與會話描述協(xié)議(SDP)、實時傳輸協(xié)議(RTP)配合,將視頻監(jiān)控服務器與客戶端監(jiān)控中心兩個部分互聯(lián)起來構(gòu)成了一個完整的通信系統(tǒng),能夠穿越局域網(wǎng)在廣域網(wǎng)范圍內(nèi)運行。
SIP也稱為RFC3261,是一個應用層的信令控制協(xié)議。用于創(chuàng)建、修改和釋放一個或多個參與者的會話。這些會話可以是Internet多媒體會議、IP電話或多媒體分發(fā)。會話的參與者可以通過組播(multicast)、網(wǎng)狀單播(unicast)或兩者的混合體進行通信。SIP模仿HTTP1.1的風格,重用HTTP編碼,所有消息基于文本,重用Internet尋址方案,使用RFC2369中定義的URI和URL格式[3]。SIP的另一個重要特點是會話雙方的會話類型可以使用會話描述協(xié)議(SDP)來實現(xiàn),只定義如何管理這些會話而不定義通信雙方的會話類型。可以將繁瑣的多媒體類型問題從信令控制問題中剝離出來,從而大大簡化了系統(tǒng)的開發(fā)難度[4]。
SIP協(xié)議定義了6種基本信令:INVITE,ACK,BYE,OPTIONS,CANCEL,REGISTER。SIP 協(xié)議根據(jù)應用的需要還定義了多種擴展方法,視頻監(jiān)控聯(lián)網(wǎng)系統(tǒng)主要采用RFC3428定義的MESSAGE方法和RFC2976定義的INF0方法。同時,在RFC3261中還定義了6類響應狀態(tài)碼,從lxx到6xx。其含義表示臨時響應、成功響應、重定向、客戶端錯誤、服務器錯誤、全局錯誤[5]。
SIP采用客戶機/服務器結(jié)構(gòu),由用戶代理(User A-gent,UA)和網(wǎng)絡服務器(Server)兩大部分組成。用戶代理包括用戶代理客戶端(UAC)和用戶代理服務器(UAS)。SIP服務器包括代理服務器、重定向服務器和注冊服務器。不同SIP服務器只是邏輯功能上的分類,而不是物理上的[6]。
本系統(tǒng)就是以視頻監(jiān)控服務器作為UAS,客戶端監(jiān)控中心作為UAC,而中間的SIP服務器完成接受用戶代理的注冊和信令的路由轉(zhuǎn)發(fā)。
本系統(tǒng)SIP模塊是基于開源庫eXosip2/osip2上開發(fā)的,筆者使用的是osip2的擴展開發(fā)庫eXosip2。開發(fā)板DM6467 操作系統(tǒng)為:montavista linux2.6.10。
首先需要編譯安裝SIP協(xié)議棧,在目標板交叉編譯協(xié)議棧,并對協(xié)議棧做測試。
其次需要實現(xiàn)SIP服務器,滿足簡單的測試需要,本系統(tǒng)采用開源的SIP服務器Kamailio(原名OpenSER),3.0版本是一個主要的發(fā)布版本,包含很多新功能和特性。安裝需要:Linux OS(this tutorial is applied on Ubuntu 10.04),Kamailio 3.0.x ,Asterisk 1.6.2.x,UnixODBC-,MySQL Server and Client(recommended 5.1+,min5.0),MySQL client library,ODBC MySQL connector。安裝后并做相關(guān)配置,創(chuàng)建合法用戶等,從而實現(xiàn)了SIP server。
系統(tǒng)由嵌入式系統(tǒng)服務器和Windows平臺客戶端組成。其中嵌入式系統(tǒng)服務器模塊充當UAS角色,Windows客戶端充當UAC角色。首先需要實現(xiàn)服務端(UAS)和客戶端(UAC)的注冊。UAS/UAC發(fā)送注冊消息,SIP server回復200OK,則注冊成功。注冊可以實現(xiàn)UA IP地址的隱藏,客戶端在無需知道服務端IP的情況下可以采用:SIP URL(sip:服務端的用戶名@SIP server IP)形式,利用SIP server地址服務來實現(xiàn)INVITE請求。由于系統(tǒng)采用TD無線模塊,每次開發(fā)板啟動后,便會自動撥號,撥號成功便返回一個IP,所以每次重啟后都得到一個隨機IP,通過前面提到的SIP服務器的定位功能便可以解決IP變動問題。
注冊成功后,客戶端(UAC)便可向服務端(UAS)發(fā)送INVITE請求,建立會話。而UAS收到INVITE,認為其合法便向UAC發(fā)送RTP媒體數(shù)據(jù)流。呼叫會話建立過程如圖1所示。
圖1 SIP會話建立過程
客戶端UAC作為會話的發(fā)起者,在注冊后,首先向SIP服務器發(fā)送INVITE請求,SIP服務器會轉(zhuǎn)發(fā)INVITE,同時發(fā)送TRYING給UAC;UAS收到INVITE后發(fā)送TRYING,并發(fā)送 RINGING給SIP服務器,SIP服務器轉(zhuǎn)發(fā)RINGING給UAC;UAS確認請求便發(fā)送200OK,SIP服務器轉(zhuǎn)發(fā)200OK,同時UAC直接回應ACK,因為至此UAC已經(jīng)獲知UAS的IP地址信息。在會話建立過程中,UAC發(fā)送的INVITE消息會攜帶SDP消息,INVITE過程就完成了媒體協(xié)商。在UAS確定接受INVITE發(fā)送200OK,UAC回復ACK后,就可以建立媒體數(shù)據(jù)流。體現(xiàn)在服務端便是在發(fā)送200OK后,就根據(jù)INVITE過程中傳遞的SDP信息建立RTP媒體任務。在會話過程中,任何一方都可以發(fā)送BYE來結(jié)束會話。
通過SIP的INVITE方法能很好地完成實時視頻流監(jiān)控,控制流方面(包括報警、配置、PTZ控制等)可以采用SIP的其他方法來實現(xiàn)。本系統(tǒng)采用MESSAGE方法來實現(xiàn)PTZ控制,INFO方法實現(xiàn)視頻屬性的配置。
MESSAGE和INFO是SIP的擴展方法,將其作為視頻監(jiān)控系統(tǒng)的控制流信令方法也被逐漸統(tǒng)一。MESSAGE和INFO的區(qū)別是:MESSAGE是會話之外的消息,傳遞及時消息;INFO的信令通路是呼叫建立之后建立的信令通路,可以是呼叫方和被呼叫方用戶代理之間的直接信令,也可以包括牽涉到呼叫建立和自己增加到初始INVITE信息記錄路由頭部的SIP代理服務器的信令通路。根據(jù)各自特點,使用MESSAGE用于云鏡控制,信令流程如圖2所示[7];而視頻參數(shù)(制式、亮度、色度、對比度、飽和度)的改變需要在會話建立以后,在通話過程中,根據(jù)需要改變,所以適合用INFO方法實現(xiàn)(信令流程和MESSAGE類似)。
圖2 MESSAGE信令流程
UAS和UAC的SIP模塊具體處理流程大致相同,但是側(cè)重于處理不同SIP消息。下面以視頻服務端為例介紹SIP模塊的執(zhí)行流程。
UAS在啟動后會進行SIP初始化,指定監(jiān)聽端口與協(xié)議類型,然后進行注冊(可以實現(xiàn)自動刷新),初始化完成后SIP處于事件檢測狀態(tài),循環(huán)監(jiān)聽端口的網(wǎng)絡事件,根據(jù)UAC的事件類型做出相應處理。SIP協(xié)議棧定義了不同的事件類型,如:EX0SIP_CALL_INVITE,EXOSIP_CALL_ACK,EX0SIP_CALL_CL0SED,EXOSIP_MESSAGE_NEW,EXOSIP_CALL_MESSAGE_NEW等,當判斷為 EX0SIP_CALL_INVITE表示UAC發(fā)送INVITE,請求建立會話,UAS就發(fā)送180振鈴,回復200OK同時攜帶SDP消息,啟動建立RTP建立過程;等UAC回應EXOSIP_CALL_ACK,即可啟動RTP發(fā)送線程;UAS收到EX0SIP_CALL_CL0SED表示UAC請求結(jié)束會話,UAS結(jié)束本次會話,退出RTP發(fā)送線程。而EXOSIP_MESSAGE_NEW是UAS收到UAC的對于云鏡的控制信息,調(diào)用yuntai()函數(shù)執(zhí)行對云鏡的控制,回復200OK;EXOSIP_CALL_MESSAGE_NEW則對應于INFO方法,根據(jù)UAC傳遞過來的參數(shù)實時改變視頻屬性。程序流程如圖3所示。
PC客戶端監(jiān)控中心在Windows平臺下采用VC++開發(fā),提供了良好的用戶界面,操作簡單直觀。運行后首先完成SIP的注冊,注冊成功就可以呼叫監(jiān)控點(視頻監(jiān)控服務器),請求視頻連接。也可以點擊對應圖標通過SIP信令通道實現(xiàn)對云鏡的控制和實時視頻屬性的改變。在本地可以實現(xiàn)視頻數(shù)據(jù)的解碼播放、存儲、回放、呼叫結(jié)束等功能??蛻舳私缑嫒鐖D4所示。
圖3 SIP模塊執(zhí)行過程
圖4 客戶端界面
筆者介紹了基于SIP的無線視頻服務器的設(shè)計和實現(xiàn)過程,以SIP作為信令控制協(xié)議使系統(tǒng)能夠更好地與其他平臺互聯(lián),實現(xiàn)數(shù)據(jù)共享。實現(xiàn)了對遠程監(jiān)控點的訪問控制和視頻流的播放,還可以在此基礎(chǔ)上更加完善功能,使視頻服務器更加智能。由于采用3G無線傳輸技術(shù),本系統(tǒng)可以用于一些特殊場合和移動環(huán)境,更具競爭力。
[1]凌慶華,石志強,程偉明.基于SIP的網(wǎng)絡視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機工程,2007,33(2):261-263.
[2]劉勇,陳延雄.SIP協(xié)議的研究及呼叫控制實現(xiàn)[J].微處理機,2008,3:54-56.
[3]ROSENBERG J,SCHULZRINNE H.RFC3261 IETF,SIP:Session Initiation Protocol[S].2002.
[4]趙哲峰,張剛,謝克明,等.基于SIP的視頻監(jiān)控服務器設(shè)計[J].太原理工大學學報,2009,40(4):337-340.
[5]何青林,陳朝武,盧煜,等.基于SI P的視頻監(jiān)控聯(lián)網(wǎng)系統(tǒng)的設(shè)計與實現(xiàn)[J].電視技術(shù),2009,33(5):116-117.
[6]萬曉榆,張溢華,樊自甫.基于SIP的視頻會議系統(tǒng)視頻模塊的設(shè)計與實現(xiàn)[J].電視技術(shù),2009,33(8):99-102.
[7]ROSENBERG J,SCHULZRINNE H,HUITEMA C,et al.RFC3428 IETF,Session Initiation Protocol(SIP)Extension for Instant Messaging[S].2002.