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