引 言: 本文所述的基于SIP协议的客户端,采用ActiveX控件嵌入方式,嵌入企业网站。在客户使用系统默认浏览器安全模式下,客户机通过ActiveX控件方式,在客户打开企业网页时,自动下载到客户Pc终端,无需客户安装软件。OSIP是使用标准C语言编写的一个开源SIP协议栈。本设计采用0SIP协议栈并在其基础上设计出完整的SIP模块以完成呼叫管理中心客户端的信令功能。
1 SIP协议
IETF组织于1999年提出了一个在基于IP网络中实现实时通信的一种信令协议,会话初始协议。其作用在于建立、修改、释放多媒体会话。在会话过程中,SIP只起到保持会话的作用,而会话本身则不是由SIP来完成的。SIP的请求消息中必须给出描述会话特征的信息。
SIP采用客户端/服务器的工作方式。SIP网络包含了两类组件:用户代理和网络服务器。
SIP请求消息是由客户端发往服务器端的消息。共定义了六个方法名:INVITE、ACK、CANCEL、BYE、REGISTER、OPTIONS。SIP应答消息是由服务器返回客户端的消息,用以指明进程状态。
2 OSIP协议栈分析
OSIP是按照RFC3261和RFC2327标准,并使用标准C编写的一个SIP协议栈,它是一个公开源码的免费协议栈。OSIP协议栈结构简单而小巧,它并不提供高层的SIP会话控制的API,它主要提供一些解析SIP俗DP消息的API和事务处理的状态机。OSIP主要包括三大部分的内容:解析器模块、状态机模块和工具模块。OSIP状态机主要分为四种:INVITE客户端事务、非INVITE客户端事务、INVITE服务器端事务、非INⅥTE服务器端事务。
3 客户端的设计
SIP客户端的功能主要是以下两个方面:a.SIP客户端的注册功能;b.会话的建立、维持和终止功能。客户端总体包括以下几个部分:主控模块、SIP模块、音频媒体处理模块、网络模块。其中SIP模块中包括SIP UA外围模块、OSIP协议栈;音频媒体处理模块包括音频设备接口模块、音频编码解码模块、RTP、RTCP模块。
3.1 主控模块
主控模块完成了用户界面的设计,为用户提供了用户注册、发起会话邀请、接收会话邀请和结束会话等操作功能。其中当选择使用代理服务器后。用户向对方发起砰叫请求时就会通过此代理服务器进行转发。此时,用户仅需要输入对方的SIP呼叫地址,即可发出呼叫邀请。当接收到呼叫请求时,可以点击接听按钮选择同意会话。当双方任意一方点击挂断按钮,便终止了会话,程序回到初始状态等待下一次会话操作。设计用户界面时,建立一个对话框类CsipphoneDlg,在此基础上创建了界面元素call和disconnect按钮。用户界面主要基于一个对话框,主要界面元素有按钮、输入框、状态栏等。输入框可以用来输入SIP地址。在已经输入呼叫地址的情况下,可以选中call”按钮进行呼叫通信,下方的状态栏会显示服务器注册等相应状态信息。通信时,若有一方想结束对话,可以点击disconnect”按钮结束对话。
在主控模块中完成了对SIP模块、网络传输模块、和音频处理模块的初始化工作,给各个模块分配了资源,创建了各模块的对象,调用相应程序初始化甬数。
3.2 SIP模块
在OSIP特点分析中,我们提到OSIP结构比较简单,并不提供SIP消息的上层管理功能,因此我们需要自己设计UA外嗣模块。UA外围模块是以OSIP协议栈为核心的UA级别的模块,主要负责对OSIP协议栈的管理,接受用户发出的消息或者指令并将其转换成相应的事件交由状态机进行处理。OSIP协议栈和其上层的UA外围模块共同组成SIP模块,完成了SIP会话功能。
UA外围模块主要包括四个类:SipUA、SipManager、SipDialog、SipMessage。
SipUA主要封装了本地uA需要使用的一些必要信息,比如本地uA的标识、本地主机的IP地址、SIP端口等等。在程序初始化的时候创建本地UA实例,对本地UA信息进行管理,同时也调用函数对OSIP协议栈进行初始化。SipUA以通过set-all-callbacks()函数注册了回调甬数。大部分的回调函数用来使底层状态机将当前事件执行状态通知给上层TU,等待TU对其作出处理。利用回调机制可以使底层状态机同上层Tu协调运作,共同完成事务的处理工作。
SipManager用来管理本地UA上运行的OSIP协议栈。SipManager对象包含一个OSIP核心协议栈的osip—t对象。在OSIP结构分析中我们谈到osip-t包含了所有状态机调用的回调函数,它用来对所有回调甬数进行管理。因此SipManager通过osip-t对象实现了对核心协议栈中完成交互功能的回调甬数的管理。
SipDialog实现了对话的管理工作。它包含了OSIP协议栈中对话埘象dialog-t,其在某一对话开始时对对话的ID、对话的类型、和当前对话的状态等进行设置。SipDidog类也包含了一系列的事务对象指针,在程序运行时指向当前对话正在处理的事务。
SipMessage主要实现了对话处理、SDP消息处理等具体功能。在对话处理方面,OSIP协议栈已经提供了SIP对话处理的基本机制,UA层在它的基础上设计了UA级别的对话处理方法。这些埘话处理函数实现了基于对话的UA发送会话请求,产生应答以及对话管理等高层用户调用功能;为应用程序层操作SIP模块提供了接口。
3.3 网络传输模块
Socket是一种基于TCP/IP的网络编程接口,它采用客户端,服务器通信模式,客户端和服务器端通过Socket接几在刚络上实现连接和数据交换。它提供了一系列系统调用,使得用户可以方便的使用TCP和UDP等网络协议实现通信。由于UDP提供的是无连接、不可靠的数据报传递服务,传输效率比较高,特别适合于实时性要求高的数据传输场合。同时在SIP模块中SIP信令采取的重传机制和握手机制,避免了SIP消息数据在传输过程中的丢包现象,因此本文采用UDP的数据报模式实现了SIP电话终端中的信令消息和音频媒体信息的传输。
3.4 音频媒体处理模块
音频多媒体通信功能由终端中的音频设备接口模块、音视频编解码模块和RTP模块共同完成,我们把它们合称为音频多媒体处理模块。媒体处理模块是Windows平台SIP终端得重要组成部分,它负责原始音频、视频数据的采集、编码和回放等功能。本文音频处理部分采用Windows提供的底层音频函数来实现,将G729作为音频压缩方案,RTP实时传输控制部分采用RTPLIB库开发实现。
4 总 结
设计了一个基于SIP的在线呼叫管理中心客户端。基于SIP协议的客户机采用ActiveX控件嵌入方式,嵌入企业网站。在客户使用系统默认浏览器安全模式下,客户机通过AetiveX控件方式。在客户打开企业网页时,自动下载到客户PC终端,无需客户安装软件。目前基于SIP协议的客户端项目还在进行当中,该系统功能还不是十分完善,一些问题没有解决,还存在许多需要进一步研究的地方。本系统对视频编解码格式还不支持,不能实现视频对话,下一步可以考虑傲视频语音编码的项目,通过改进客户端的媒体库,增强系统性能。
总之,SIP协议作为一个新兴而结合NGN要求的技术极具发展潜力。随着下一代网络的到来和3G通信技术的发展,对这一协议的研究会具有越来越重要的现实意义。