黄小雅, 华惊宇, 徐志江, 孟利民
(浙江工业大学 信息工程学院,杭州 310023)
随着通信、计算机以及互联网技术的发展,出现了基于IP网络的电话调度系统[1]。电话调度系统是一种指挥调度的专业通信系统,在工业生产和义务活动中得到了广泛的应用,研究基于IP电话的集群[2]语音系统是具有非常重要意义的。近年来电话会议系统不断推陈出新,第4代移动通信技术的普及或(Next Generation Network,NGN)的建设也推动着会话标准及技术的发展趋于成熟[3],IP网络传送多媒体信息的技术再逐渐代替传统电信业务。而IP电话调度系统的核心技术之一是信令技术,IETF[3]组织规定了SIP[4]会议系统的框架与呼叫流程,描述了SIP会议体系组织,提供基础的模型框架,使SIP系统已经成为业界主流[5]。在IP网络上的电话会议系统中,通常使用SIP或H.323[6]协议来进行信令控制,使用实时传输协议(Real-time Transport Protocol,RTP[7])协议来传送实时的媒体流量。
本文围绕基于IP的电话调度实验系统,采用基于SIP的软交换[8]设计,重点研究并描述了基于IP电话的集群语音调度技术的开发流程和框架,其中设计的组呼[9]是集群通信系统中最重要的调度业务与指挥手段,并使得开发的软件得到实际的应用。
SIP协议采用的是客户端/服务器(Client/Service)的工作方式,在SIP网络中主要由两类:用户代理(User Agent)和网络服务器(Network Server)[10]。用户代理是用户端的终端系统的应用程序,是用户端进行交互的一个实体。每个用户代理都包含了用户代理服务器 (UAS[11])和用户代理客户端(UAC)两个部分的功能,其中UAC负责发起各类请求,而UAS负责响应对应的UAC请求。网络服务器主要用来为用户代理提供路由、注册、鉴权、认证等服务,分为注册服务器、代理服务器和重定位服务器3种。
实时音频传输系统包括:流媒体服务器、信令服务器、组呼服务器、数据库该框架。流媒体服务器:主要功能是控制音频数据RTP包的流入和流出;媒体信令服务器:主要功能是设备和用户的接入管理;媒体分发服务器:主要功能室获取设备端的音频数据,并分发给组内客户端;手持终端设备:主要功能为上传接收音频数据如图1所示。
图1 总体架构框图
初始化系统的时候,用户终端需要注册[12],用户终端把自己的SIP URI和IP地址进行绑定后,将此信息保存在服务器中,注册登记流程如图2所示。
图2 用户注册
用户单元向SIP服务器发送REGISTER消息,信令服务器根据用户发送的用户名查找数据库,若该用户名存在,回复200 OK表示收到请求,并在回复消息中捎带用户ID和MD5加密种子,用户单元收到200 OK回复后读取加密种子后经算法md5(devid+seed+md5(pwd))得出注册密码,再次发送注册登记请求。服务器收到此请求后进行相同的算法对注册登记信息进行验证、核准后将注册成功或失败的消息返回给用户单元。
当SIP终端在本地注册服务器之后,就可以发起和接受会话请求了。建立会话过程如图3所示,首先设备A对设备B发起了INVITE请求,请求包括了媒体流格式、类型以及IP地址、端口号等信息,INVITE请求就被送到本地的SIP代理服务器。本地代理服务器收到请求后,通过查询得到设备B的IP地址、端口号,此时代理服务器把接收到的INVITE请求转发给设备B。
图3 用户建立会话
设备B接受呼叫请求后,会发回200 OK响应。当设备A从代理服务器接收到200 OK响应后便开始传输音频数据给服务器。这个时候会话就成功建立了,设备A和设备B之间就可以直接传输媒体流等信息。在会话过程中,如果任何一方想结束会话,可直接给对方发送BYE请求,对方收到BYE请求后,若发送给对方200 OK,则本次通话结束。
设备呼叫模块有两种设计,一种是单呼模式,另一种是组呼模式。其中组呼模式为:用户端(DEV1)开机之后向代理服务器索取当前所在组的组呼服务器的IP、Port。利用进程间通信与组呼平台建立Socket[13]连接,组呼内信令以及音频数据都往组呼平台发送,由组呼平台对组内其他成员进行语音分发,框图如图4所示。组呼通信还包括抢占话语权、计时、强拉强拆[14]等功能,同时组呼通信可以选择性的跳转到单呼通信进行点对点对话,满足组内通话的调度系统。
图4 服务器组呼框图
单呼模式为:用户端(DEV1)与代理服务器(SIP服务器)之间是通过socket进行网络间通信,应用层通过进程间通信,利用SIP层实现私有SIP消息的接收和发送。Sipt runk服务器负责将私有的协议消息转换成标准的SDP协议。Asterisk是一款实现电话用户交换机功能的自由、开源软件,可以连接多种不同的电话终端。Asterisk服务器解析传进来的标准SDP协议中的字段,做出判断后反向通知到被呼叫的终端。音频数据都由流媒体服务器进行用户端与用户端之间的转发工作,框图如图5所示。
图5 服务器单呼框图
为了实现语音调度系统所需要的所有业务服务,我们需要扩展SIP协议来满足我们的需求,在这里对SIP协议的扩展主要是SIP协议的消息体以及服务器框架的改变。作为语音调度系统,调度功能是最大的优点也是最主要的功能,其中包括会议、强拆以及强拉等功能。而调度功能的实现也需要SIP的扩展来实现。经过以上的分析,可以发现这些特殊的业务本质上就是多方通话的模式。可以针对每个业务,将其分解成各个不同的子操作进行实现后,最后将这些实现好的子操作组合起来完成系统需要的特殊的业务。下面介绍具体的模块处理流程,但是限于篇幅并不给出实际代码。
组呼是指多个用户终端参加,可以由一人讲话多人倾听的一对多的通信方式。由调度中心设定当前组内成员,终端开机即在当前组内,可以直接与组内成员进行通话。调度员需要保持双向的语音连接,而且调度员可以随时讲话,他说的话可以让所有组成员都听到,而在这个组中的其他成员每次只能有一个成员可以讲话。语音调度组呼模块处理流程如图6所示。
图6 组呼信令流程图
组内设备开机后向代理服务器发送SUBSCRIBE-XML消息体,代理服务器直接查询数据库,回复200 OK并带有当前组呼服务器(GRS)的端口号和IP。设备端通过对组呼服务器进行套接字Socket绑定,每隔10 s发送两个带有200 OK字段的RTP包进行与服务器的一个保活连接。
设备开始讲话时先向组呼服务器发送带CJSON格式的消息体来确认当前是否能拿到组内话语权。解析GRS回复消息,若为200 OK,设备开始将RTP音频包发送给GRS,GRS进行语音分发。
单呼通信就是源SIP用户终端和目的SIP用户终端之间实现端到端的连接,用户终端之间可以单独的进行多媒体信息流的传输。单呼通信的实现流程如图7所示。
主叫设备(左端DEV)向代理服务器发送INVITE-XML消息,代理服务器接收INVITE消息后回复100 Trying,并且解析出必要的字段信息后,作为参数调用相关函数与MDS服务器进行交互。交互分为两步:先打开一个端口,等待接收主叫设备发来的数据流,成功之后调用会调函数,在代理服务器中先保留端口号;再打开一个端口,等待被叫设备(右端DEV)发来的数据流,成功之后会调函数转发INVITE消息给Siptrunk,该INVITE消息携带MDS地址与端口信息。
Siptrunk接收INVITE-XML消息,解析出软交换分机号和MDS端口等必要信息,构造出标准的INVITE消息体,通过Asterisk路由,发送到Siptrunk,并转发到被叫设备;被叫设备接收到INVITE消息后回复200 OK,代理服务器转发200 OK给Siptrunk,Siptrunk接收到200 OK,解析出端口信息,向主叫设备发送200OK。整个呼叫过程成功。
图7 单呼信令流程图
上述呼叫功能已实现,设备端开机进入当前组实现组呼功能,即可与组内成员进行一对多的通话。同时本系统能支持特殊的业务,即切换到设备端与设备端之间的通信。流程如下:① 设备端向平台获取当前所有在线用户的信息,界面显示;② 用户锁定当前要拨打的在线用户号码,进行拨号连接;③ 设备端退出当前组内会话,进行端与端之间通信,即实现单呼过程(见图8)。
图8 获取用户信息信令表
强拉指的是对于已经存在的组内通信会话,其他用户终端想要插入到这个会话当中,进行多方通信会话。强拆指的是强行挂断某个用户终端当前的组内通信会话。信令流程图如图9所示。
图9 强拉强拆信令流程图
首先调度台人员点击调度台主界面上的强拉按钮(USER),服务器就会去查找要被拉进的用户终端(DEV)是否存在,若不存在就不能进行强拉操作;如果存在调度台可以直接向其发NOTIFY-XML消息请求来建立通话,用户端解析出当前XML消息中的new-groupnum字段,若为协商字符串内容则为强拆模式,回复带有200 OK的response即为成功拉取。此时用户端会去执行组呼模流程来入组。同时代理服务器端转发200 OK的response给调度台,调度台以此消息作为根据显示拉取成功等界面字样。这样DEV设备就被加入到该对话中,实现强拉通信方式。强拆模式类似强拉模式,其中new-groupnum字段若为’0’,则为强拆模式,回复带有200 OK的response即为成功拆组,此时用户端退出当前组进入无组模式。
在实验室前期开发的嵌入式硬件平台上[15],本文作者基于C语言和Linux系统实现了SIP群组通话设备,其中单呼、组呼以及调度功能等基本上得以实现。如图10所示,左上为主界面图示,终端自启动开始即进入组号为7001的群组,此时按下旁边PTT键即可与组内成员进行语音通信;右上为在线用户信息图示,用户可选择被呼叫者,图示选择用户名为PNDT28、号码为9028的用户进行通信,此时只需要按下单呼键即可从组内通信跳转为单呼;左下为单呼呼叫中等待对方应答;右下为处于单呼通话中界面。
图11为服务器后台打印消息截图,左上为设备单呼时向服务器端发起的INVITE请求;左下为服务器端回应请求的RESPONSE消息;右上为QT端给设备端的消息队列消息解析结果;右下为向服务器端请求组呼会话权的CJSON格式消息。
对整个系统进行实验测试,实验次数均为20次,分为3G卡移动传输和WiFi局域网传输。得到的数据如表1所示,其中组呼切换单呼以及单呼接通状态的成功率较低,推测部分原因为这里面包含了一个退出群组一个进入单呼两个过程,每个过程都需要与服务器进行信令交互,加上3G网络不稳定,使用移动传输不成功率就大大增加了。其他指标成功率均为80%以上,达到预期结果。
表1 实现单呼组呼各项功能数据
集群通信系统最重要、最关键的业务就是组呼,本方案设计的IP电话调度实验系统采用SIP协议作为信令控制协议,遵循开放协议标准并且使用了C/S框架,给出了基于SIP协议的电话调度系统的框架,并针对这个架构进行了设计和实现,并且实现了会议、强拉强拆等重要功能的模块,完成了预期目标。但业务制定还不完善,调度系统也还需要再进行改进来支持所有的终端,这仍然是一个重要的研究课题。
[1] 江 枫. 基于SIP协议的电话调度系统的设计与实现[D]. 西安:西安电子科技大学, 2013.
[2] 张 扬. 基于SIP的软交换在集群通信系统中的设计与实现[J]. 计算机系统应用, 2010, 19(1):31-35.
[3] 周 欢. 集群系统中调度平台的技术研究与实现[D]. 北京:北方工业大学, 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终端与注册服务器的研究与实现[D]. 广州:广东工业大学, 2013.
[6] 魏 强, 苏 森, 陈俊亮. 基于SIP的集中式多媒体会议系统的研究[J]. 计算机工程与应用, 2004, 40(14):34-37.
[7] 褚 典, 江春华, 郝宗波,等. 基于SIP、RTP/RTCP和RTSP协议的视频监控系统[J]. 计算机与现代化, 2013(11):139-142.
[8] 糜正琨. 软交换组网与业务[M]. 北京:人民邮电出版社, 2005.
[9] 张 扬. 基于SIP协议实现集群通信系统中的组呼业务[J]. 移动通信, 2009, 33(12):74-78.
[10] 李艳培, 王根英. 基于Asterisk的SIP语音调度服务器的设计[J]. 铁路计算机应用, 2013, 22(12):42-46.
[11] 程晓亮. 基于SIP协议的NGN网络多媒体会议系统研究及实现[D]. 成都:电子科技大学, 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协议的高速公路电话调度系统研究[J]. 交通信息与安全, 2008, 26(5):123-126.
[14] 师 卫, 李孝荣, 刘丽芳. IP电话调度系统的系统设计研究[J]. 电脑开发与应用, 2008, 21(2):60-61.
[15] 董安武. 基于DM365的手持终端显示系统的设计与实现[D]. 杭州:浙江工业大学, 2014.