2
回答
基于oSIP的嵌入式SIP终端的研究与实现
终于搞明白,存储TCO原来是这样算的>>>   

        分析了开源SIP协议栈oSIP的运行机制。在oSIP基础上,设计实现了一个基于S3C2410A微处理器平台,使用WinCE操作系统的嵌入式SIP 终端。

       1、  引言

       目前,IETF的SIP协议(Session Initiate Protocol, 会话初始协议)已获得业界越来越多的关注和支持,正逐步成为下一代网络(NGN)中的核心协议之一[1]。SIP协议相对简单、易 于实现、可扩展性强、更适合IP网络,被广泛的用于VoIP系统的组建[2]。oSIP及其扩展eXosip作为开源的SIP协议 栈,以其结构简单、功能丰富、易于移植等优点成为在嵌入式系统上构建VoIP应用的首选。本文分析了oSIP协议栈的运行机制,设计实现了将oSIP协议 栈移植到嵌入式操作系统并以此为基础开发嵌入式SIP客户端的方案。

       2、  oSIP协议栈

       2.1 SIP协议

       SIP协议是一个用于建立、更改和终止多媒体会话的应用层协议。现在的协议文本是IETF于2002年7月发表的RFC3261。SIP分别从用户定位、 用户状态查询、用户能力查询、会话建立、会话管理五个方面实现对多媒体通信的控制。作为一种信令控制协议,它需要和IETF的其它协议如SDP、RTP、 RTSP和SAP等协同工作。SIP会话中的媒体交换可以使用任何传输协议,但工程上一般都以RTP(Real-time Transmit Protocol,实时传输协议)作为传输协议。

       SIP采用C/S模式的工作方式,包含两类元素:SIP用户代理(User Agent, UA)和SIP服务器。根据用户代理在会话中扮演的角色不同又可分为用户代理客户机(User Agent Client, UAC)和用户代理服务器(User Agent Server, UAS),前者发起呼叫请求,后者响应呼叫请求。

       2.2 oSIP协议栈

       oSIP是遵循IETF标准,使用ANSI C编写,源代码开放的SIP协议栈。oSIP主要有下列优点:

       (1)结构小巧简单,只有400K左右,适合在嵌入式系统上应用;

       (2)可移植性好,已被成功的应用于Solaris、HP Unix、VxWorks、Windows和GNU/Linux[3] (2.2.16和2.4.7)等系统中;

       (3)工作稳定、兼容性强。

       oSIP主要由解析模块、工具模块和状态机模块构成,其核心是状态机模块[4](如图1所示)。

图1 oSIP结构

       解析模块完成对SIP请求和响应进行封装与解析处理。解析模块又可分为SIP解析、SDP解析与URL解析。

       工具模块主要提供一些处理工具用于对话管理和SDP协商。

       状态机模块负责对某个事务(如注册过程、呼叫过程等)状态的维持及处理,并在特定的状态下触发响应的事件或回调函数。根据RFC描述中关于SIP协议事务 层的定义,oSIP协议栈有4种状态机:客户端邀请事务(ICT),客户端非邀请事务(NICT),服务器端要求事务(IST),服务器端非邀请事务 (NIST)。前两种状态机是由客户端发起的,后两种状态机是由服务器发起的,这4种状态机涵盖了SIP的各种事务类型。其中ICT(如图2所示)是 SIP客户端中最常见的事务。

图2 ICT状态机状态转换图

       图2中,cb_ict_xxx_xxx表示oSIP中ICT状态机回调函数,当ICT从一种状态到另一种状态时oSIP协议栈将调用此函数。

       oSIP专注于SIP底层解析,这使得它具有很高的效率。但另一方面,由于没有提供高层的SIP会话控制API,使得上层应用在调用协议栈时很破碎,降低 了易用性。为此oSIP的开发者们又在oSIP的基础上开发了eXosip。eXosip是oSIP的扩展,它部分封装了oSIP协议栈,使得它更容易被 使用。eXosip实现了作为单个SIP终端的大部分功能。

       3、  嵌入式SIP终端系统体系结构

       3.1 嵌入式SIP终端的功能

       嵌入式SIP终端是一个运行在嵌入式操作系统上的SIP用户代理,主要包括SIP电话的注册、呼叫、接听、挂断等功能。它直接与用户交互,接收输入信息, 进行格式检查,根据用户的动作初始化SIP消息,同时得到本地语音媒体接口信息,形成SDP描述,完成UDP或TCP封装。

       3.2 系统软硬件平台的选择

       为选择合适的软硬件平台,我们收集了大量相关资料,经过反复比较并结合现有实验条件做出了如下选择:

       (1)嵌入式处理器种类繁多,我们选择了三星的S3C2410A微处理器。该处理器基于ARM920T内核,主频最高为203MHz。是一款高性价比、低 功耗、高集成度的CPU,专为手持设备和网络应用设计,能满足嵌入式系统低功耗、高性能、小体积的要求。同时,S3C2410系列处理器已得到广泛使用, 技术资料丰富,这也是采用S3C2410平台进行开发的有利条件。此外,我们还选用了带有的触摸屏的SHARP L35T23 3.5”液晶显示器作为系统输入/输出设备。

       (2)嵌入式操作系统方面,考虑到GUI界面开发的难易程度,我们选择了Microsoft的Windows CE.NET 4.2。WinCE 4.2版本在内核、实时性和网络支持等方面做了很大的优化和增强,同时还为基于WinCE的嵌入式系统的开发提供了强大的工具——Platform Builder 4.2(PB 4.2)。这些特性有助于我们快速开发嵌入式系统。

       (3)在开发工具的选择上,我们选用了与Windows CE.NET 4.2同时推出的Microsoft Embedded Visual C++ 4.0(eVC 4.0)。这个开发环境和VC6.0十分类似,易于掌握,同时还包含有许多WinCE专用的标准开发工具和远程调试工具。

       3.3 系统体系结构

       我们设计的嵌入式SIP终端系统总体结构如图3所示:

图3 嵌入式SIP终端系统体系结构

       整个系统分为3个层次:

       (1)系统平台层:包括硬件平台及运行在其上的嵌入式操作系统,这是整个系统的基础。

       (2)协议栈层:运行SIP协议栈,为用户程序提供调用。RTP模块我们采用了开源的jrtplib。jrtplib采用C++编写,可以方便的移植到 WinCE系统上。移植jrtplib到嵌入式操作系统不是本文的重点,具体做法在此不再赘述。

       (3)用户程序层:负责接收用户的输入,根据用户请求类型调用协议栈层功能,同时实现oSIP的回调函数,并将结果反馈给用户。

       4、  嵌入式SIP终端的实现

       4.1 系统平台层实现

       本系统开发使用的硬件设备都直接向设备供应商购买,但由于嵌入式系统是软硬件高度结合的系统,还需要根据硬件条件定制一个WinCE平台。在PB中可以定 制出满足各种不同需求的CE系统。我们使用设备供应商提供的BSP,利用PB平台创建向导新建了一个WinCE映象文件并将其下载到开发板中固化。

       4.2 协议栈层的实现

       oSIP协议栈在设计之初就考虑到了满足嵌入式操作系统的的特定要求,这使得只需做很少量的修改(主要是需要加入一些针对WinCE的头文件)就能将 oSIP移植到WinCE系统中。

       另外,WinCE的API中没有time()函数的实现,我们需要自己实现这个函数,代码如下:

       #ifdef _WIN32_WCE

       SYSTEMTIME t;

       #endif

       ……

       #ifdef _WIN32_WCE

         GetSystemTime(&t);

         now = (int)((t.wYear-1970)       *365*24*3600+t.wMonth*30*24*3600+t.wDay*24*3600+t.wHour*3600+ t.wMinute *60+t.wSecond);

#else

  now = time(NULL);

#endif

       完成必要的修改后,重新编译就可以得到能在WinCE系统上使用动态链接库。

       4.3 用户程序层的实现

       在系统启动过程中,用户程序首先根据用户配置对系统全局变量进行赋值操作,然后向oSIP协议栈注册回调函数,并启动数据包监听线程。一旦接受到数据包, 则调用协议栈功能生成相应事件并判断该事件的处理事务是否存在,若存在则将事件放入该事务中,否则生成新的事务,启动事务执行线程。同时根据用户动作生成 相应事件交由协议栈处理。

       oSIP通过状态机回调函数与用户程序通信,向用户程序通告事件的发生及事务状态。用户程序调用oSIP协议栈API发起oSIP动作(添加事件,事件处 理等)。

       5、  结束语

       本文提出了一个基于ARM9核心的处理器平台,以oSIP协议栈为基础的嵌入式SIP终端设计方案,并就嵌入式系统平台搭建、协议栈移植、SIP用户代理 的实现等问题进行了讨论。测试结果表明,根据该方案实现的嵌入式SIP终端系统能实现预想的功能和性能。有理由相信,随着SIP协议的广泛应用和嵌入式技 术的不断发展,嵌入式SIP终端将具有美好的前景。

       本文作者创新点:本文讨论并实现了oSIP协议栈在WinCE系统上的移植和应用,提出了一个嵌入式SIP终端的系统分层结构同时指出了上述分层结构中各 层次在实现时要注意的主要问题。

       参考文献

       [1] 司端锋,韩心慧,龙勤等.SIP标准中的核心技术与研究进展[J].软件学报.2005 16(2).

       [2] 刘志军,王风著,张孟辉等.软交换技术协议SIP及其在VoIP中应用[J].微计算机信息.2006,09-3:169-172

       [3] 卢华,王保保.oSIP协议栈的研究及应用[J].电子科技.2006.2.

       [4]  libosip Documentation 2.2.0.http://www.gnu.org/software/osip/doc/html/

举报
红薯
发帖于9年前 2回/2K+阅
顶部