基于SIP的PTT演示系统设计与开发

2013-10-12 03:28郭际川王霄峻
电气电子教学学报 2013年6期
关键词:会话服务器端客户端

郭际川,王霄峻,仇 帅

(1.重庆市公安局技术研究所,重庆404100;2.东南大学移动通信国家重点实验室,江苏南京210096)

会话发起协议SIP(Session Initiation Protocol)最初用于现有Internet上实现基于IP的电话业务。SIP位于应用层,可以实现建立、修改和结束多媒体会话的功能,多媒体会话可以有两个或者多个参与者。IETF参考了HTTP、SMTP协议后提出了SIP标准,其编码是文本方式的,所以SIP的可扩展性强,十分灵活[1]。

1 基于SIP的PTT系统

一键通PTT(Push To Talk)借鉴传统对讲机技术,当用户按下PTT键就可以将所说的话发送出去,一个通话组内的用户都可以听到,但是同一时间内只能有一个用户在说话[2-4]。

PTT业务刚兴起时,各大厂商都陆续推出了专用PTT协议规范,并开发了各自的PTT产品。但由于这些PTT产品基于不同的协议开发,无法实现不同网络间的互联互通。为了解决PTT业务在发展中存在的问题,开放手机联盟OMA(Open Mobile Alliance)组织成立了OMA PoC(PTT over Cell)工作组,公布了OMA PoC标准1.0版本,现已更新到POC标准2.1版本。

图1给出了基于SIP协议的PoC结构,主要包括以下功能实体:PoC客户端、PoC服务器、XDM客户端、PoC XDM服务器和SIP/IP核心[5]。OMA的PoC规范是基于庞大复杂的移动通信和IMS体系建立的PTT系统,而在工矿企业生产调度、交通管理调度等过程中,也急需在行业IP分组专网环境下建立布设简捷、普适性强的PTT系统。

图1基于SIP协议的POC结构

图2为国家重大专项“新型宽带移动IP承载网架构研究、关键技术研发与试验验证”中所设计的智能交通系统ITS行业专网功能结构示意图,其核心网和无线MESH网均支持基于IP分组的传输。因此,基于SIP实现PoC机制的PTT系统具备较好的可行性。

图2 ITS下的集中式PTT系统

2 基于SIP协议的PTT工作流程

1)PTT会话的用户注册

用户想要与其他用户建立PTT会话,首先必须在当前网络的SIP/IP核心下注册。图3给出了用户注册的流程[5,6]。

图3 PTT会话的用户注册流程

2)PTT会话的建立

会话的建立过程可以分为两部分:SIP会话的建立以及语音突发控制。详细流程如图4所示。

图4 PTT会话建立的信令流程

3)PTT会话的释放

PTT会话的释放同样包括两个过程:用户发言权的释放,以及退出当前会话。具体流程如图5。

图5 PTT会话的释放

3 基于SIP的话音PTT实现及测试

开源软件Jitsi是一款采用JAVA语言开发的点到点VOIP软件,支持SIP协议,可提供基础的语音通信功能[7]。但其采用全双工方式,也没有实现发言权控制(Floor control)功能。本文对Jitsi开源客户端的会话控制模块进行了修改,添加了PTT按键,使其变成半双工的通信方式。

我们采用了开放源代码的软件VoIP PBX系统的Asterisk软件作为服务器[8]。Asterisk作为服务器完成客户端的SIP注册,以及PTT会话的建立。本文在此开发源码基础上额外设计了Floor control模块。编译了PTT客户端和服务器端软件,搭建了测试环境并完成了相关功能的验证。

3.1 基于SIP协议PTT客户端的设计

借鉴OMA PoC的相关规范给出客户端的设计方案如图6所示。

图6 PTT客户端的模块架构

客户端主要包括:用户接口模块、GLMS Access模块、呼叫控制模块、媒体控制模块、Floor Control模块、SIP核心模块和RTP核心模块[9-11]。

(1)用户接口模块

会话者通过用户接口模块与PTT系统进行交互,该模块包括4个主要界面:Register Frame、Phone Alert Frame、Main Frame和Task Status Area Icon。图7给出了用户接口模块的具体框架。

图7 用户接口模块

(2)呼叫控制模块

PTT会话的建立主要包括SIP会话的建立以及语音突发的控制两部分。对开源软件Jitsi的修改主要集中在呼叫控制模块,本文对Jitsi源码中的ProcessAck方法下的OperationSetBasicTelephonySip-Imp.java进行了修改,并在HoldbuttonModel.java中添加了PTT按键,用于实现半双工的语音通话。我们设计的客户端呼叫控制模块的状态转移图,如图8所示。

图8 呼叫控制模块状态转移图

3.2 服务器端Floor Control模块

只有当一个用户获得floor后才有发言的权利。与floor相关的功能就由Floor control模块来实现,图9给出了服务器端Floor Control模块的状态转移流程图。

图9 Floor control模块的状态转移图

3.3 PTT话音系统测试环境搭建及功能测试

本文PTT客户端的开发基于Java语言,开发环境为NetBeans[12]。所需硬件包括两台PC机(Win 7操作系统),其中一台PC机中安装了VMware,在虚拟机中安装了Red Hat Linux 9.0。PTT测试实验环境如图10所示。

图10 测试PTT的实验环境

上图中PTT Client A与Server服务器处于一台PC上,Server服务器运行在虚拟机中,虚拟机采用桥接的方式与物理机的网卡连接。PTT Client B运行在另外一台PC上,两台PC的网卡直连。关闭三个操作系统的防火墙,PTT Client A的IP地址设置为202.119.22.11,PTT Client B的IP地址设置为202.119.22.14,Server的IP地址设置为202.119.22.15。

(1)服务器的安装与配置

asterisk服务器的配置,需要在配置文件sip.conf上添加如图11所示内容。

图11 服务器配置文件

终端中输入asterisk-rvvvvv进入服务器的控制台,然后执行sip reload和extensions reload载入新的配置文件,至此服务器搭建成功。

(2)客户端的编译安装及测试

NetBeans是一个开源的集成开发环境,是一个开放的框架可扩展的开发平台,用于Java、C/C++和PHP等语言的开发,可以通过扩展插件来扩展功能。在集成开发环境下编译PTT客户端的源代码,运行之后客户端A弹出界面如图12所示。

图12 PTT客户端的注册界面

客户端A在首次登陆时会要求用户输入帐户,以及密码。登陆成功后,实际上完成了PTT用户的注册过程,此时客户端会弹出主界面如图13所示。

图13 客户端登陆成功的主界面

服务器对客户端的帐号密码进行验证,登陆成功会显示在线,登陆失败则显示离线。图14给出了服务器端Asterisk控制台中两台客户端登陆信息。

图14 服务器端的注册信息

显示“2online”表示两台客户端均成功登陆,完成了PTT用户的注册。此时客户端A欲向客户端B发送语音,需要在地址栏中输入客户端B的用户名shuaiqiu并按下呼叫按钮,弹出会话窗口如图15。

图15 发起SIP会话建立请求

此时客户端A并不能发送话音,它需要等待客户端B的回应。客户端B会弹出消息框提示客户端A用户qiushuai发起了呼叫,并响铃。提示窗口如图16所示。

图16 被呼叫时的提示窗口

若客户端B接受该呼叫,则两个用户之间就成功建立起了SIP会话。图17给出了服务器Asterisk控制台的信息。

图17 服务器SIP会话建立成功时控制台的信息

可以看到客户端A向客户端B发出了呼叫请求,客户端B开始响铃,在客户端B接受该呼叫后。会话被挂起,等待用户按键。若此时客户端A按下PTT键,则会显示如图18。

图18 客户端A按下PTT键后

此时客户端A获得了发言权,录音设备开始采集用户的语音,并打包成RTP包发送给服务器。服务器收到语音流后,会将该语音转发给客户端B。当客户端A发言完毕,只需再次按下PTT键。若客户端A想退出当前的会话组,不再接受其他用户的语音,则需要按下挂断键,通过服务器将BYE消息转发给客户端B,客户端B回复一条ACK消息后。客户端A即成功退出当前的会话组,此时,客户端A的会话窗口如图19所示。

4 结语

图19 客户端A退出当前会话组后的窗口

本文介绍了SIP协议的基本概念,阐述了PTT业务的基本概念,分析了基于SIP协议话音PTT功能实体的主要功能。并对PTT会话中的用户注册、PTT会话建立和PTT会话注销的流程做出了详尽的分析。

本文主要工作在开源软件Jitsi上进行二次开发,给出了PTT客户端的设计方案,修改其呼叫控制模块。利用Asterisk作为服务器,额外设计和开发了Floor control模块,在Netbeans集成开发环境下编译安装了PTT客户端,搭建了实验环境,对PTT话音系统做了相关测试。

实验证明:会话建立时间短,话音清晰。

[1] J.Rosenberg,H.Schulzrinne,SIP:Session Initiation Protocol[S] .IETF:RFC2784.June 2002.

[2] 杨川.基于SIP的PoC系统服务器设计[D] :[硕士学位论文] .厦门大学.2008.04.

[3] 侯玉华,潘海鹏.POC业务两种实现方式的测试分析[J] .北京:通信世界.2006.38:13-14.

[4] Ding-Jyh Tsaur,Chia-Lung Liu.Efficiency Analysis and Improvement of SIP-based Push-to-Talk over Cellular[J] .2010 Fourth International Conference on Genetic and Evolutionary Computing.2010:764-765.

[5] Push-to-Talk over Cellular(PoC)Architecture[S] ,PoC Release 2.0.

[6] 饶丹.OMA PoC的实现与工程应用[D] :[硕士学位论文] .电子科技大学.2009.05.

[7] Sip-communicator.www.sip-communicator.org

[8] Asterisk,http://www.asterisk.org.

[9] H.Schulzrinne,S.Casner,RTP Profile for Audio and Video Conferences with Minimal Control[S] .IETF:RFC3551.July 2003.

[10] oRTP:A Real-time Transport Protocol stack under LGPL.http://www.linphone.org/ortp.

[11] Jain_sip library.http://jsip.java.net.

[12] Netbeans,http://www.netbeans.org

猜你喜欢
会话服务器端客户端
Linux环境下基于Socket的数据传输软件设计
QQ和微信会话话轮及话轮转换特点浅析
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
浅析异步通信层的架构在ASP.NET 程序中的应用
基于集群节点间即时拷贝的会话同步技术研究①
基于Qt的安全即时通讯软件服务器端设计
汉语教材中的会话结构特征及其语用功能呈现——基于85个会话片段的个案研究