黃小雅, 華驚宇, 徐志江, 孟利民
(浙江工業(yè)大學(xué) 信息工程學(xué)院,杭州 310023)
隨著通信、計(jì)算機(jī)以及互聯(lián)網(wǎng)技術(shù)的發(fā)展,出現(xiàn)了基于IP網(wǎng)絡(luò)的電話調(diào)度系統(tǒng)[1]。電話調(diào)度系統(tǒng)是一種指揮調(diào)度的專業(yè)通信系統(tǒng),在工業(yè)生產(chǎn)和義務(wù)活動(dòng)中得到了廣泛的應(yīng)用,研究基于IP電話的集群[2]語音系統(tǒng)是具有非常重要意義的。近年來電話會(huì)議系統(tǒng)不斷推陳出新,第4代移動(dòng)通信技術(shù)的普及或(Next Generation Network,NGN)的建設(shè)也推動(dòng)著會(huì)話標(biāo)準(zhǔn)及技術(shù)的發(fā)展趨于成熟[3],IP網(wǎng)絡(luò)傳送多媒體信息的技術(shù)再逐漸代替?zhèn)鹘y(tǒng)電信業(yè)務(wù)。而IP電話調(diào)度系統(tǒng)的核心技術(shù)之一是信令技術(shù),IETF[3]組織規(guī)定了SIP[4]會(huì)議系統(tǒng)的框架與呼叫流程,描述了SIP會(huì)議體系組織,提供基礎(chǔ)的模型框架,使SIP系統(tǒng)已經(jīng)成為業(yè)界主流[5]。在IP網(wǎng)絡(luò)上的電話會(huì)議系統(tǒng)中,通常使用SIP或H.323[6]協(xié)議來進(jìn)行信令控制,使用實(shí)時(shí)傳輸協(xié)議(Real-time Transport Protocol,RTP[7])協(xié)議來傳送實(shí)時(shí)的媒體流量。
本文圍繞基于IP的電話調(diào)度實(shí)驗(yàn)系統(tǒng),采用基于SIP的軟交換[8]設(shè)計(jì),重點(diǎn)研究并描述了基于IP電話的集群語音調(diào)度技術(shù)的開發(fā)流程和框架,其中設(shè)計(jì)的組呼[9]是集群通信系統(tǒng)中最重要的調(diào)度業(yè)務(wù)與指揮手段,并使得開發(fā)的軟件得到實(shí)際的應(yīng)用。
SIP協(xié)議采用的是客戶端/服務(wù)器(Client/Service)的工作方式,在SIP網(wǎng)絡(luò)中主要由兩類:用戶代理(User Agent)和網(wǎng)絡(luò)服務(wù)器(Network Server)[10]。用戶代理是用戶端的終端系統(tǒng)的應(yīng)用程序,是用戶端進(jìn)行交互的一個(gè)實(shí)體。每個(gè)用戶代理都包含了用戶代理服務(wù)器 (UAS[11])和用戶代理客戶端(UAC)兩個(gè)部分的功能,其中UAC負(fù)責(zé)發(fā)起各類請求,而UAS負(fù)責(zé)響應(yīng)對應(yīng)的UAC請求。網(wǎng)絡(luò)服務(wù)器主要用來為用戶代理提供路由、注冊、鑒權(quán)、認(rèn)證等服務(wù),分為注冊服務(wù)器、代理服務(wù)器和重定位服務(wù)器3種。
實(shí)時(shí)音頻傳輸系統(tǒng)包括:流媒體服務(wù)器、信令服務(wù)器、組呼服務(wù)器、數(shù)據(jù)庫該框架。流媒體服務(wù)器:主要功能是控制音頻數(shù)據(jù)RTP包的流入和流出;媒體信令服務(wù)器:主要功能是設(shè)備和用戶的接入管理;媒體分發(fā)服務(wù)器:主要功能室獲取設(shè)備端的音頻數(shù)據(jù),并分發(fā)給組內(nèi)客戶端;手持終端設(shè)備:主要功能為上傳接收音頻數(shù)據(jù)如圖1所示。
圖1 總體架構(gòu)框圖
初始化系統(tǒng)的時(shí)候,用戶終端需要注冊[12],用戶終端把自己的SIP URI和IP地址進(jìn)行綁定后,將此信息保存在服務(wù)器中,注冊登記流程如圖2所示。
圖2 用戶注冊
用戶單元向SIP服務(wù)器發(fā)送REGISTER消息,信令服務(wù)器根據(jù)用戶發(fā)送的用戶名查找數(shù)據(jù)庫,若該用戶名存在,回復(fù)200 OK表示收到請求,并在回復(fù)消息中捎帶用戶ID和MD5加密種子,用戶單元收到200 OK回復(fù)后讀取加密種子后經(jīng)算法md5(devid+seed+md5(pwd))得出注冊密碼,再次發(fā)送注冊登記請求。服務(wù)器收到此請求后進(jìn)行相同的算法對注冊登記信息進(jìn)行驗(yàn)證、核準(zhǔn)后將注冊成功或失敗的消息返回給用戶單元。
當(dāng)SIP終端在本地注冊服務(wù)器之后,就可以發(fā)起和接受會(huì)話請求了。建立會(huì)話過程如圖3所示,首先設(shè)備A對設(shè)備B發(fā)起了INVITE請求,請求包括了媒體流格式、類型以及IP地址、端口號(hào)等信息,INVITE請求就被送到本地的SIP代理服務(wù)器。本地代理服務(wù)器收到請求后,通過查詢得到設(shè)備B的IP地址、端口號(hào),此時(shí)代理服務(wù)器把接收到的INVITE請求轉(zhuǎn)發(fā)給設(shè)備B。
圖3 用戶建立會(huì)話
設(shè)備B接受呼叫請求后,會(huì)發(fā)回200 OK響應(yīng)。當(dāng)設(shè)備A從代理服務(wù)器接收到200 OK響應(yīng)后便開始傳輸音頻數(shù)據(jù)給服務(wù)器。這個(gè)時(shí)候會(huì)話就成功建立了,設(shè)備A和設(shè)備B之間就可以直接傳輸媒體流等信息。在會(huì)話過程中,如果任何一方想結(jié)束會(huì)話,可直接給對方發(fā)送BYE請求,對方收到BYE請求后,若發(fā)送給對方200 OK,則本次通話結(jié)束。
設(shè)備呼叫模塊有兩種設(shè)計(jì),一種是單呼模式,另一種是組呼模式。其中組呼模式為:用戶端(DEV1)開機(jī)之后向代理服務(wù)器索取當(dāng)前所在組的組呼服務(wù)器的IP、Port。利用進(jìn)程間通信與組呼平臺(tái)建立Socket[13]連接,組呼內(nèi)信令以及音頻數(shù)據(jù)都往組呼平臺(tái)發(fā)送,由組呼平臺(tái)對組內(nèi)其他成員進(jìn)行語音分發(fā),框圖如圖4所示。組呼通信還包括搶占話語權(quán)、計(jì)時(shí)、強(qiáng)拉強(qiáng)拆[14]等功能,同時(shí)組呼通信可以選擇性的跳轉(zhuǎn)到單呼通信進(jìn)行點(diǎn)對點(diǎn)對話,滿足組內(nèi)通話的調(diào)度系統(tǒng)。
圖4 服務(wù)器組呼框圖
單呼模式為:用戶端(DEV1)與代理服務(wù)器(SIP服務(wù)器)之間是通過socket進(jìn)行網(wǎng)絡(luò)間通信,應(yīng)用層通過進(jìn)程間通信,利用SIP層實(shí)現(xiàn)私有SIP消息的接收和發(fā)送。Sipt runk服務(wù)器負(fù)責(zé)將私有的協(xié)議消息轉(zhuǎn)換成標(biāo)準(zhǔn)的SDP協(xié)議。Asterisk是一款實(shí)現(xiàn)電話用戶交換機(jī)功能的自由、開源軟件,可以連接多種不同的電話終端。Asterisk服務(wù)器解析傳進(jìn)來的標(biāo)準(zhǔn)SDP協(xié)議中的字段,做出判斷后反向通知到被呼叫的終端。音頻數(shù)據(jù)都由流媒體服務(wù)器進(jìn)行用戶端與用戶端之間的轉(zhuǎn)發(fā)工作,框圖如圖5所示。
圖5 服務(wù)器單呼框圖
為了實(shí)現(xiàn)語音調(diào)度系統(tǒng)所需要的所有業(yè)務(wù)服務(wù),我們需要擴(kuò)展SIP協(xié)議來滿足我們的需求,在這里對SIP協(xié)議的擴(kuò)展主要是SIP協(xié)議的消息體以及服務(wù)器框架的改變。作為語音調(diào)度系統(tǒng),調(diào)度功能是最大的優(yōu)點(diǎn)也是最主要的功能,其中包括會(huì)議、強(qiáng)拆以及強(qiáng)拉等功能。而調(diào)度功能的實(shí)現(xiàn)也需要SIP的擴(kuò)展來實(shí)現(xiàn)。經(jīng)過以上的分析,可以發(fā)現(xiàn)這些特殊的業(yè)務(wù)本質(zhì)上就是多方通話的模式??梢葬槍γ總€(gè)業(yè)務(wù),將其分解成各個(gè)不同的子操作進(jìn)行實(shí)現(xiàn)后,最后將這些實(shí)現(xiàn)好的子操作組合起來完成系統(tǒng)需要的特殊的業(yè)務(wù)。下面介紹具體的模塊處理流程,但是限于篇幅并不給出實(shí)際代碼。
組呼是指多個(gè)用戶終端參加,可以由一人講話多人傾聽的一對多的通信方式。由調(diào)度中心設(shè)定當(dāng)前組內(nèi)成員,終端開機(jī)即在當(dāng)前組內(nèi),可以直接與組內(nèi)成員進(jìn)行通話。調(diào)度員需要保持雙向的語音連接,而且調(diào)度員可以隨時(shí)講話,他說的話可以讓所有組成員都聽到,而在這個(gè)組中的其他成員每次只能有一個(gè)成員可以講話。語音調(diào)度組呼模塊處理流程如圖6所示。
圖6 組呼信令流程圖
組內(nèi)設(shè)備開機(jī)后向代理服務(wù)器發(fā)送SUBSCRIBE-XML消息體,代理服務(wù)器直接查詢數(shù)據(jù)庫,回復(fù)200 OK并帶有當(dāng)前組呼服務(wù)器(GRS)的端口號(hào)和IP。設(shè)備端通過對組呼服務(wù)器進(jìn)行套接字Socket綁定,每隔10 s發(fā)送兩個(gè)帶有200 OK字段的RTP包進(jìn)行與服務(wù)器的一個(gè)?;钸B接。
設(shè)備開始講話時(shí)先向組呼服務(wù)器發(fā)送帶CJSON格式的消息體來確認(rèn)當(dāng)前是否能拿到組內(nèi)話語權(quán)。解析GRS回復(fù)消息,若為200 OK,設(shè)備開始將RTP音頻包發(fā)送給GRS,GRS進(jìn)行語音分發(fā)。
單呼通信就是源SIP用戶終端和目的SIP用戶終端之間實(shí)現(xiàn)端到端的連接,用戶終端之間可以單獨(dú)的進(jìn)行多媒體信息流的傳輸。單呼通信的實(shí)現(xiàn)流程如圖7所示。
主叫設(shè)備(左端DEV)向代理服務(wù)器發(fā)送INVITE-XML消息,代理服務(wù)器接收INVITE消息后回復(fù)100 Trying,并且解析出必要的字段信息后,作為參數(shù)調(diào)用相關(guān)函數(shù)與MDS服務(wù)器進(jìn)行交互。交互分為兩步:先打開一個(gè)端口,等待接收主叫設(shè)備發(fā)來的數(shù)據(jù)流,成功之后調(diào)用會(huì)調(diào)函數(shù),在代理服務(wù)器中先保留端口號(hào);再打開一個(gè)端口,等待被叫設(shè)備(右端DEV)發(fā)來的數(shù)據(jù)流,成功之后會(huì)調(diào)函數(shù)轉(zhuǎn)發(fā)INVITE消息給Siptrunk,該INVITE消息攜帶MDS地址與端口信息。
Siptrunk接收INVITE-XML消息,解析出軟交換分機(jī)號(hào)和MDS端口等必要信息,構(gòu)造出標(biāo)準(zhǔn)的INVITE消息體,通過Asterisk路由,發(fā)送到Siptrunk,并轉(zhuǎn)發(fā)到被叫設(shè)備;被叫設(shè)備接收到INVITE消息后回復(fù)200 OK,代理服務(wù)器轉(zhuǎn)發(fā)200 OK給Siptrunk,Siptrunk接收到200 OK,解析出端口信息,向主叫設(shè)備發(fā)送200OK。整個(gè)呼叫過程成功。
圖7 單呼信令流程圖
上述呼叫功能已實(shí)現(xiàn),設(shè)備端開機(jī)進(jìn)入當(dāng)前組實(shí)現(xiàn)組呼功能,即可與組內(nèi)成員進(jìn)行一對多的通話。同時(shí)本系統(tǒng)能支持特殊的業(yè)務(wù),即切換到設(shè)備端與設(shè)備端之間的通信。流程如下:① 設(shè)備端向平臺(tái)獲取當(dāng)前所有在線用戶的信息,界面顯示;② 用戶鎖定當(dāng)前要撥打的在線用戶號(hào)碼,進(jìn)行撥號(hào)連接;③ 設(shè)備端退出當(dāng)前組內(nèi)會(huì)話,進(jìn)行端與端之間通信,即實(shí)現(xiàn)單呼過程(見圖8)。
圖8 獲取用戶信息信令表
強(qiáng)拉指的是對于已經(jīng)存在的組內(nèi)通信會(huì)話,其他用戶終端想要插入到這個(gè)會(huì)話當(dāng)中,進(jìn)行多方通信會(huì)話。強(qiáng)拆指的是強(qiáng)行掛斷某個(gè)用戶終端當(dāng)前的組內(nèi)通信會(huì)話。信令流程圖如圖9所示。
圖9 強(qiáng)拉強(qiáng)拆信令流程圖
首先調(diào)度臺(tái)人員點(diǎn)擊調(diào)度臺(tái)主界面上的強(qiáng)拉按鈕(USER),服務(wù)器就會(huì)去查找要被拉進(jìn)的用戶終端(DEV)是否存在,若不存在就不能進(jìn)行強(qiáng)拉操作;如果存在調(diào)度臺(tái)可以直接向其發(fā)NOTIFY-XML消息請求來建立通話,用戶端解析出當(dāng)前XML消息中的new-groupnum字段,若為協(xié)商字符串內(nèi)容則為強(qiáng)拆模式,回復(fù)帶有200 OK的response即為成功拉取。此時(shí)用戶端會(huì)去執(zhí)行組呼模流程來入組。同時(shí)代理服務(wù)器端轉(zhuǎn)發(fā)200 OK的response給調(diào)度臺(tái),調(diào)度臺(tái)以此消息作為根據(jù)顯示拉取成功等界面字樣。這樣DEV設(shè)備就被加入到該對話中,實(shí)現(xiàn)強(qiáng)拉通信方式。強(qiáng)拆模式類似強(qiáng)拉模式,其中new-groupnum字段若為’0’,則為強(qiáng)拆模式,回復(fù)帶有200 OK的response即為成功拆組,此時(shí)用戶端退出當(dāng)前組進(jìn)入無組模式。
在實(shí)驗(yàn)室前期開發(fā)的嵌入式硬件平臺(tái)上[15],本文作者基于C語言和Linux系統(tǒng)實(shí)現(xiàn)了SIP群組通話設(shè)備,其中單呼、組呼以及調(diào)度功能等基本上得以實(shí)現(xiàn)。如圖10所示,左上為主界面圖示,終端自啟動(dòng)開始即進(jìn)入組號(hào)為7001的群組,此時(shí)按下旁邊PTT鍵即可與組內(nèi)成員進(jìn)行語音通信;右上為在線用戶信息圖示,用戶可選擇被呼叫者,圖示選擇用戶名為PNDT28、號(hào)碼為9028的用戶進(jìn)行通信,此時(shí)只需要按下單呼鍵即可從組內(nèi)通信跳轉(zhuǎn)為單呼;左下為單呼呼叫中等待對方應(yīng)答;右下為處于單呼通話中界面。
圖11為服務(wù)器后臺(tái)打印消息截圖,左上為設(shè)備單呼時(shí)向服務(wù)器端發(fā)起的INVITE請求;左下為服務(wù)器端回應(yīng)請求的RESPONSE消息;右上為QT端給設(shè)備端的消息隊(duì)列消息解析結(jié)果;右下為向服務(wù)器端請求組呼會(huì)話權(quán)的CJSON格式消息。
對整個(gè)系統(tǒng)進(jìn)行實(shí)驗(yàn)測試,實(shí)驗(yàn)次數(shù)均為20次,分為3G卡移動(dòng)傳輸和WiFi局域網(wǎng)傳輸。得到的數(shù)據(jù)如表1所示,其中組呼切換單呼以及單呼接通狀態(tài)的成功率較低,推測部分原因?yàn)檫@里面包含了一個(gè)退出群組一個(gè)進(jìn)入單呼兩個(gè)過程,每個(gè)過程都需要與服務(wù)器進(jìn)行信令交互,加上3G網(wǎng)絡(luò)不穩(wěn)定,使用移動(dòng)傳輸不成功率就大大增加了。其他指標(biāo)成功率均為80%以上,達(dá)到預(yù)期結(jié)果。
表1 實(shí)現(xiàn)單呼組呼各項(xiàng)功能數(shù)據(jù)
集群通信系統(tǒng)最重要、最關(guān)鍵的業(yè)務(wù)就是組呼,本方案設(shè)計(jì)的IP電話調(diào)度實(shí)驗(yàn)系統(tǒng)采用SIP協(xié)議作為信令控制協(xié)議,遵循開放協(xié)議標(biāo)準(zhǔn)并且使用了C/S框架,給出了基于SIP協(xié)議的電話調(diào)度系統(tǒng)的框架,并針對這個(gè)架構(gòu)進(jìn)行了設(shè)計(jì)和實(shí)現(xiàn),并且實(shí)現(xiàn)了會(huì)議、強(qiáng)拉強(qiáng)拆等重要功能的模塊,完成了預(yù)期目標(biāo)。但業(yè)務(wù)制定還不完善,調(diào)度系統(tǒng)也還需要再進(jìn)行改進(jìn)來支持所有的終端,這仍然是一個(gè)重要的研究課題。
[1] 江 楓. 基于SIP協(xié)議的電話調(diào)度系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 西安:西安電子科技大學(xué), 2013.
[2] 張 揚(yáng). 基于SIP的軟交換在集群通信系統(tǒng)中的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用, 2010, 19(1):31-35.
[3] 周 歡. 集群系統(tǒng)中調(diào)度平臺(tái)的技術(shù)研究與實(shí)現(xiàn)[D]. 北京:北方工業(yè)大學(xué), 2015.
[4] Rosenberg J, Schulzrinne H, Camarillo G,etal. RFC 3261SIP: Session initiation protocol[C]// The Workshop on Contemporary Communications, 2002:382-388.
[5] 成海秀. 嵌入式SIP終端與注冊服務(wù)器的研究與實(shí)現(xiàn)[D]. 廣州:廣東工業(yè)大學(xué), 2013.
[6] 魏 強(qiáng), 蘇 森, 陳俊亮. 基于SIP的集中式多媒體會(huì)議系統(tǒng)的研究[J]. 計(jì)算機(jī)工程與應(yīng)用, 2004, 40(14):34-37.
[7] 褚 典, 江春華, 郝宗波,等. 基于SIP、RTP/RTCP和RTSP協(xié)議的視頻監(jiān)控系統(tǒng)[J]. 計(jì)算機(jī)與現(xiàn)代化, 2013(11):139-142.
[8] 糜正琨. 軟交換組網(wǎng)與業(yè)務(wù)[M]. 北京:人民郵電出版社, 2005.
[9] 張 揚(yáng). 基于SIP協(xié)議實(shí)現(xiàn)集群通信系統(tǒng)中的組呼業(yè)務(wù)[J]. 移動(dòng)通信, 2009, 33(12):74-78.
[10] 李艷培, 王根英. 基于Asterisk的SIP語音調(diào)度服務(wù)器的設(shè)計(jì)[J]. 鐵路計(jì)算機(jī)應(yīng)用, 2013, 22(12):42-46.
[11] 程曉亮. 基于SIP協(xié)議的NGN網(wǎng)絡(luò)多媒體會(huì)議系統(tǒng)研究及實(shí)現(xiàn)[D]. 成都:電子科技大學(xué), 2005.
[12] Hilt V, Mankin A, Hofmann M. A framework for SIP session policies[J]. Bell Labs Technical Journal, 2004, 9(3):45-56.
[13] 孫大躍, 蘇鶴俊, 屈立成,等. 基于SIP協(xié)議的高速公路電話調(diào)度系統(tǒng)研究[J]. 交通信息與安全, 2008, 26(5):123-126.
[14] 師 衛(wèi), 李孝榮, 劉麗芳. IP電話調(diào)度系統(tǒng)的系統(tǒng)設(shè)計(jì)研究[J]. 電腦開發(fā)與應(yīng)用, 2008, 21(2):60-61.
[15] 董安武. 基于DM365的手持終端顯示系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 杭州:浙江工業(yè)大學(xué), 2014.