SIP服务器调查报告

开源SIP服务器调查报告

一、引言

随着通信IP化的发展,IP传输的高带宽、低成本等优势使得越来越多的企业、电信运营商加快建设基于IP的各种通信应用。在通信协议IP化发展中,SIP协议毫无争议地成为各大电信运营商构建其未来网络的基础协议,越来越多的SIP软件产品也不断出现在行业应用中。SIP协议的标准化,同时也造就了一大批优秀的开源软件产品,包括Asterisk、SipXecs、FreeSWITCH、OpenSIPS等SIP服务端软件,也包括X-lite、LinPhone、eyeBeam等SIP客户端软件。

二、调查目的

     根据目前已经着手开发的系统所采用的服务器Asterisk来看,Asterisk支持视频通话的效果不是很理想,影响通话的质量。为此,本文对当前所有的SIP开源服务器进行调查分析,对其性能、使用方便程度等多方面进行分析,从而为选取支持视频且视频质量较高的服务器做准备。

三、调查内容

目前SIP开源服务器主流的有以下几个:

1、  OpenSIPS

OpenSIPS是一个成熟的开源SIP服务器,除了提供基本的SIP代理及SIP路由功能外,还提供了一些应用级的功能。OpenSIPS的结构非常灵活,其核心路由功能完全通过脚本来实现,可灵活定制各种路由策略,可灵活应用于语音、视频通信、IM以及Presence等多种应用。同时OpenSIPS性能上是目前最快的SIP服务器之一,可用于电信级产品构建。

凭借其可扩展、模块化的系统架构,OpenSIPS提供了一个高度灵活的、用户可配置的路由引擎,可以为voice、video、IM和 presence等服务提供强大高效的路由、鉴权、NAT、网关协议转化等功能。由于其稳定高效等特点,OpenSIPS已经被诸多电信运营商应用在自己的网络体系中。其主要功能如下:

n  SIP注册服务器/代理服务器(lcr、dynamic routing、dialplan)/重定向服务器

n  SIP presence agent

n  SIP B2BUA

n  SIP IM Server

n  SIP to SMS/XMPP网关

n  SIP to XMPP网关

n  SIP 负载均衡

n  SIP NAT traversal

源码下载网址:http://www.opensips.org/Downloads/Downloads

详细介绍:http://www.voip-info.org/wiki/view/OpenSIPS

官方网站:http://www.opensips.org/

2、  Kamailio

Kamailio® (former OpenSER) is an Open Source SIP Server released under GPL, able to handle thousands of call setups per second. Among features: asynchronous TCP, UDP and SCTP, secure communication via TLS for VoIP (voice, video); WebSocket support for WebRTC; IPv4 and IPv6; SIMPLE instant messaging and presence with embedded XCAP server and MSRP relay; IMS extensions; ENUM; DID and least cost routing; load balancing; routing fail-over; accounting, authentication and authorization; support for many backend systems such as MySQL, Postgres, Oracle, Radius, LDAP, Redis, Cassandra; XMLRPC control interface, SNMP monitoring. It can be used to build large VoIP servicing platforms or to scale up SIP-to-PSTN gateways, PBX systems or media servers like Asterisk?, FreeSWITCH? or SEMS. Kamailio and the SIP Express Router (SER) teamed up for the integration of the two applications and new development.

源码下载地址:http://www.kamailio.org/w/download/

安装指南:http://blog.csdn.net/yetyongjin/article/details/8106997

                   http://blog.csdn.net/rosekin/article/details/7103183

                   http://www.oschina.net/p/kamailio

         官方网站:http://www.kamailio.org/w/

3、  sipXecs

sipXecs is a modular and scalable communications solution for enterprises of all sizes. It provides a highly available SIP routing core integrated with a growing suite of communications services all managed through a unified web based management application. sipXecs provides traditional PBX telephony services integrated with instant messaging, and allows the use of advanced communications tools like video calling.

The sipXecs Enterprise Communications Solution is a native SIP based solution that offers all the typical features expected from a PBX, including voicemail, unified messaging, auto-attendant, conferencing, presence and call center capabilities. sipXecs can be deployed on a single server for smaller installations or as a distributed and optionally redundant system for larger deployments. It's Web Services (SOA) based management and configuration system allows centralized management of a distributed system and offers plug & play configuration for all phones and gateways.

The sipXecs developer community is strong and growing. sipXecs has built a reputation for being easy to use, scalable and of high quality. In addition, sipXecs is a unified communications solution, not just an IP PBX.

The sipXecs project delivers a fully capable open source unified communications solution for the small to mid-enterprise market. This market ranges from a few users to several thousand users, possibly located in different buildings, cities, or countries.

源码下载地址:http://download.sipfoundry.org/pub/sipXecs/ISO/

参考资料:http://www.doc88.com/p-4455907895111.html

4、  freeswitch

FreeSWITCH 是一个 免费、开源 的通信软件,可用于创建音、视频以及短消息类产品和应用。 它采用 Mozilla Public License (MPL)授权协议, MPL是一个 开源的软件协议. 它的核心库libfreeswitch可以嵌入其它系统或产品中,也可以做一个单独的应用存在。

源码下载地址:http://files.freeswitch.org/

参考资料:http://en.wikipedia.org/wiki/FreeSWITCH

http://wenku.baidu.com/link?url=WHBaHNAKHkZsw3ptXD31Kd6eQD8bgkw14MRraJzR04tDqV47UkQmB1zETCJfcwpERpq3o2OtSjXE3DgGRHeS1t7Vl17VbdZ99OC5VGyXoxK

5、  Cipango

Cipango is a SIP Servlet extension to the popular Jetty HTTP Servlet engine. Cipango is then a convergent SIP/HTTP Application Server compliant with both SIP Servlets and HTTP Servlets standards.

Cipango shares many of Jetty goals and is designed to be lighweight (SIP and HTTP services may be configured to use less than 1MB), simple to use, flexible and highly performant. It can be used for convergent HTTP/SIP applications and is also able to support any kind of SIP-only applications such as :

n  Subscriber communications applications : presence, call forward and screening, rich-media services, conferencing, instant messaging, contact centers ...

n  Network functions : rich call control access, protocol translation, intelligent routing and logging ...

源码下载地址:http://code.google.com/p/cipango/

6、  Mobicents

The Mobicents Communication Platform is the best architecture to create, deploy and manage services and applications integrating voice, video and data across a range of IP and legacy communications networks. It drives convergence with the following key enablers:

http://mobicents.googlecode.com/svn/wiki/images/Mobicents%20Platform.png

参考资料:http://mobicents.googlecode.com/svn/trunk/servers/jain-slee/

http://www.slideshare.net/jean.deruelle/mobicents-20-the-java-open-source-communications-platformfosdem-20##-jean-deruelle

源码下载网址:http://sourceforge.net/projects/mobicents/?source=navbar

                             http://code.google.com/p/mobicents/

7、  Yate

Yate is a next-generation telephony engine; while currently focused on Voice over Internet Protocol (VoIP) and PSTN, its power lies in its ability to be easily extended. Voice, video, data and instant messenging can all be unified under Yate's flexible routing engine, maximizing communications efficiency and minimizing infrastructure costs for businesses.

Yate can be used as a:

n  VoIP server

n  SS7 switch

n  VoIP client

n  Jabber server

n  Jabber client

n  Conference server - with up to 200 voice channels in a single conference

n  VoIP to PSTN gateway

n  PC2Phone and Phone2PC gateway

n  IP Telephony server and/or client

l  H.323 gatekeeper

l  H.323 multiple endpoint server

l  H.323<->SIP Proxy

l  SIP session border controller

l  SIP router

l  SIP registration server

l  IAX server and/or client

l  Jingle client or server

l  MGCP server (Call Agent)

n  ISDN passive and active recorder

n  ISDN, RBS, analog passive recorder

n  Call center server

n  IVR engine

n  Prepaid and/or postpaid cards system

源码下载地址:http://yate.null.ro/pmwiki/index.php?n=Main.Download

参考资料:http://en.wikipedia.org/wiki/Yate

四、性能分析

1、OpenSIPS

a、基本应用配置

OpenSIPS不但提供了丰富的功能,还具有操作简单的特点。所有OpenSIPS的应用功能都可以通过一个配置文件opensips.cfg来实现的。该配置文件主要分为三个部分,第一部分主要是全局变量的设置;第二部分主要是加载模块,并设置模块的相应参数;第三部分主要是路由的策略和功能应用。

b、系统结构

OpenSIPS的架构开放灵活,其核心功能控制均可通过脚本控制实现,各个功能也通过模块加载的方式来构建。采用lex和yacc工具构建的配置文件分析器是其架构设计中的重要部分之一。通过这个分析器,opensips设计了自己的语法规则,使得我们可以适合SIP规范的语言来进行配置文件中的脚本编写,从而达到简化程序以及方便代码阅读的目的。同时这样的设计也使opensips.cfg配置文件的执行速度达到了C语言的级别。其体系结构大体如下图:

框架的最上层是用于实现sip消息路由逻辑的opensips.cfg脚本配置,在配置文件中,可以使用Core提供的Parameter和Function,也可以使用众多Modules提供的Function。比如在之前的负载均衡示例中,is_method(“INVITE”)就属于textops模块提供的功能,src_ip和src_port都属于Core提供的参数。下层,提供了网络传输、sip消息解析等基本功能。在左侧,通过相应的数据库适配器,可是使用多种数据库存取数据。在这样的体系结构下,我们就可以方便地通过增加功能module来添加我们需要的功能,而不会对原有系统造成影响。

除了以上所述的OpenSIPS的优点,OpenSIPS还提供了一系列的管理维护命令的接口。我们可以通过Core和Module提供的MI管理接口,方便的监控系统以及模块的状态。比如,通过Core的fifo ps命令,可以获取当前进程的状态;通过Core的fifo get_statistics命令,可以获得当前共享内存以及各进程私有内存的使用情况等等。通过MI管理接口,我们还可以方便地在运行时修改部分参数,比如,对于load_balancer模块,我们可以通过fifo lb_reload命令,更新目标组的配置信息,可以通过fifo lb_status命令激活或关闭某个目标,这些命令在实际应用中都非常实用。如果希望通过WEB图形界面管理OpenSIPS,OpenSIPS社区还提供了OpenSIPS Control Panel 4.0产品。

c、与其他项目共同搭建VOIP服务

OpenSIPS并不具备一个媒体服务器(Media Server)的功能。媒体服务器主要提供了类似VoiceMail、呼叫中语音交换、会议服务、视频服务等一系列和语音、视频相关的服务;而OpenSIPS的主要功能主要在于代理、路由和网关。因此,单独的OpenSIPS并不能够提供VOIP服务,只有和Asterisk等具备媒体功能的软件整合,才能构建可靠的语音服务体系。

对于媒体服务器,开源世界也提供了很多选择,如老牌的Asterisk,以及功能全面的sipXecs以及专注于IVR功能的FreeSwitch等,他们都是非常优秀的开源项目。其中Asterisk功能全面、灵活,但主要面向企业应用,在性能上稍差。但Asterisk提供了完善的PBX功能,可以连接多种不同的电话终端,支持多种主流的IP电话协议和系统接口。FreeSwtich专注于IVR功能,性能、可靠性非常高。近期FreeSwitch已被sipXecs采用作为其IVR部分功能。sipXecs则是一个功能比较全面的产品,包括IVR、VoiceMail、人工坐席等等,更难得的是SipXecs提供了良好的配置、管理界面,易于使用。

只要将OpenSIPS作为前置接入,将多个Asterisk、FreeSwitch、sipXecs挂接在其后,由OpenSIPS实现SIP消息的转发和负载均衡,就可以轻松地实现各种语音业务以及规模扩展。如下图所示。

2、Kamailio

         Kamailio can be used on systems with limited resources as well as on carrier grade servers. It is written in pure C for Unix/Linux-like systems with architecture specific optimizations to offer high performances. Kamailio Project aims to be a collaborative environment of its users to develop secure and extensible SIP server to provide modern Unified Communication and VoIP services.

3、sipXecs

sipXecs企业通信系统(ECS)是一个高伸缩性、企业级的通信解决方案。它是名为SIPFoundry的非盈利性、开源组织的一个独立的产品。借助标准和基于开源环境,sipXecs提供低成本、易使用,以及在其他系统中找不到的互操作性、功能和可伸缩性。

sipXecs基于SIP协议。它提供了所期望的PBX的全部典型功能,包括:语音信箱(VoiceMail)、统一消息(Unified Messaging)、自动总机(Auto-Attendant)、电话会议(Conferencing)、出席(Presence)、以及呼叫中心(Call Center)应用等。sipXecs不仅仅是一个指令集的网路电话交换平台,而可以算是一个整体解决方案(Total Solution)。也就是说,它已包含了一个网路电话交换系统要能实际上线使用、所有需要并会用到的应用组件,例如Web-UI等。sipXecs是目前开源IP-PBX中唯一可以做到终端电话免设定,可以即插即用的系统。这种特性对于应用在办公室的大量部署非常有用。不过有一点要注意,与Asterisk不同,sipXecs是以L-GPL软件授权,这与GPL授权大致是相同,只是差别在于函式库部分有特别的授权条款。

4、freeswitch

a、freeswtich对高清(HD)语音编码的支持

freeswitch支持 大部分高清语音编码,包括Speex,G.722,G.722.1(Siren) 及SILK,与之对比,asterisk 1.8版本之前只支持采样为8000的常用语音编码,1.10后asterisk开始从新架构其media codec模块,以全面支持高清等宽频语音编码。

b、有些语音编码以模块方式加载(G729等),有的则属于freeswitch core部分(G711),系统默认不加载所有语音编码,对于没有加载的编码,可以通过配置modules.conf.xml配置,在fs_cli上 执行 "show codec" 会显示当前系统已经加载的编码:

type,name,ikey
codec,ADPCM (IMA),mod_spandsp
codec,AMR,mod_amr
codec,G.711 alaw,CORE_PCM_MODULE
codec,G.711 ulaw,CORE_PCM_MODULE
codec,G.722,mod_spandsp
codec,G.723.1 6.3k,mod_g723_1
codec,G.726 16k,mod_spandsp
codec,G.726 16k (AAL2),mod_spandsp
codec,G.726 24k,mod_spandsp
codec,G.726 24k (AAL2),mod_spandsp
codec,G.726 32k,mod_spandsp
codec,G.726 32k (AAL2),mod_spandsp
codec,G.726 40k,mod_spandsp
codec,G.726 40k (AAL2),mod_spandsp
codec,G.729,mod_g729
codec,GSM,mod_spandsp
codec,H.261 Video (passthru),mod_h26x
codec,H.263 Video (passthru),mod_h26x
codec,H.263+ Video (passthru),mod_h26x
codec,H.263++ Video (passthru),mod_h26x
codec,H.264 Video (passthru),mod_h26x
codec,LPC-10,mod_spandsp
codec,PROXY PASS-THROUGH,CORE_PCM_MODULE
codec,PROXY VIDEO PASS-THROUGH,CORE_PCM_MODULE
codec,Polycom(R) G722.1/G722.1C,mod_siren
codec,RAW Signed Linear (16 bit),CORE_PCM_MODULE
codec,Speex,mod_speex
codec,iLBC,mod_ilbc

以模块方式加载的编码在目录 src\mod\codecs下面,所以如果我们想添加自己的编码,在此目录下参考其他实现即可,freeswitch对新编码的添加接口也及其简单,主要为注册几个四个回调,init,encode,decode,destroy,然后通过 switch_core_codec_add_implementation 把这几个回调的实现注册进去。

c、设置编码的优先级

vars.xml可以设置系统默认使用的编码,为全局设置,下面两个变量,一个表示呼入,一个表示呼出。
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=G722,PCMA,PCMU,GSM"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=G722,PCMA,PCMU,GSM"/>

同时,不同的协议类型(SIP,和H323等)可以设置自己的编码优先级,比如采用SIP协议时,可以在
sofia.conf.xml
<settings>
 <param name="inbound-codec-prefs" value="$${global_codec_prefs}"/>
 <param name="outbound-codec-prefs" value="$${global_codec_prefs}"/>
</settings>

这里,SIP协议类型继承了vars.xml的全局设置(呼入,呼出)。

d、对编解码转换的支持
(1)作为B2BUA,freeswitch支持大部分音频编码的转换,但无视频编码转换功能。
(2)对于语音编码 G721 / G728 / G719 / AMR,只支持转发,不支持转换。
(3)freeswitch支持的视频编码 (只转发)
    H261 - H.261 Video
    H263 - H.263 Video
    H263-1998 - H.263-1998 Video
    H263-2000 - H.263-2000 Video
    H264 - H.264 Video 
    Provided by mod_h26X.
    Theora passthrough. 
    Provided by mod_theora.
    MP4 Video passthrough. 
    Provided by mod_mp4v.

e、媒体代理
freeswitch对媒体的处理有三种方式:

(1).默认方式:媒体通过freeswitch,RTP被freeswtich转发,freeswitch控制编码的协商并在协商不一致时提供语音编码转换能力,支持录音,二次拨号等。

(2).代理模式: 媒体通过freeswitch转发,但是不处理媒体  RTP通过freewtich转发(只改动sdp c= ip)  freeswtich不控制 sdp参数,只是转发。  通话的终端必须有一致的语音或者视频编码,因为freeswitch此时不支持转码(适合视频编码)不支持录音,二次拨号等功能

(3).不转发也不处理媒体此模式下freeswitch更像是一个信令proxy,媒体不会通过freeswitch, sdp消息体也不做修改,没有录音,二次拨号等功能。

三种方式在不同应用场景下各有优点,对于(1),也是默认方式,更适合呼叫中心等富功能应用,但性能相比其他两个也是最差的,对于(2),更适合处理nat问题,可以考虑用这种模式做一个session border controlor,也适合于外部MCU配合做为视频会议,性能也明显好于(1),对于 (3),更像是一个信令代理,性能最高,但提供的功能有限。

5、Mobicents

Mobicents 是一个高伸缩性、事件驱动的应用服务器、是一款专业的、开放源代码的 VoIP 中间件平台。Mobicents是首个采用JAIN SLEE标准的开放式源代码电信应用服务器环境。被用于语音、视频和电信下一代智能网络(NGIN)的开发中, Mobicents 为 SDP 和 IMS 应用提供了一个高性能的核心引擎。

JAIN SLEE就是JAIN Service Logic Execution Environment (JSLEE)的说法。JAIN是JAVA APIs for Integrated Networks或者JAIN APIs for Integrated Networks的简称,为融合(综合)网络而提供的JAVA API规范(provide APIs for Integrated Networks ),关注通信网络的各个方面(target all aspects of communications networks )”的目的而定义的标准规范。JAIN是Java从IT领域到电信领域的扩展,目的是使得电信领域的增值应用业务也像IT领域的增值应用业务一样快速开发、自由部署、移植便捷。但对Sun来说,这正是它们的拿手好戏,它们在IT领域就是做这个的。还记得“Write Once,Run AnyWhere”吗?现在他们就是通过JAIN技术标准把所有这些好处带到电信领域里来。JAIN是Sun公司和其他设备商、运营商制定的规范,通过这个规范为电信领域应用业务的开发制定了统一的接口,通过这个统一的接口,屏蔽网络层以下设备的不同差异、实现业务和承载的分离,各层业务功能独立且职责清晰,电信网络由以前的封闭状态慢慢的变为了开放状态,在这样开放的基础者上,电信领域增值应用开发、部署、移植也会越来越快捷。值得强调的是,JAIN是一个规范,Sun下的JAIN项目专家组(分为协议专家组(PEG)和应用专家组(AEG))只负责制定,不负责实现,如果设备商或运营商支持JAIN规范,就要自己去实现规范的内容,然后到JAIN的官方网站下载一个TCK(Technology Compatibility Kit:技术兼容工具),用它来验证产品是否达到规范要求的标准,如果达到标准了,就可以向JAIN申请认证了。认证好之后,大家就都可以按照JAIN的标准开发和部署了。

Mobicents及相关子项目包括:

RestComm – 下一代云通信平台实现的快速构架和部署语音和消息通信应用,使用主流Web开发技术。RestComm是面向电信2.0 的SaaS解决方案。

Session Border Controller (SBC) – 允许服务提供商增强其IP服务,解决NAT转换问题,配置复杂平衡策略,流量过滤和基于端口和负载定期其他规则。

JAIN SLEE – 一个事件驱动型的可高可扩展的应用服务器,它具有健壮的模块化设计模型和容错的执行环境。SLEE针对不同的网络提供了丰富的连接适配器,包括 SS7 MAP, TCAP, INAP, ISUP, SMPP, USSD, XMPP, SIP, MGCP, HTTP, XDM, XCAP等等。完全兼容于JSR 240 (JSLEE 1.1)。

jSS7 – 实现兼容ITU-T协议栈,不但能支持IP (SIGTRAN)开,还能支持遗留的SS7卡。支持SS7的所有层,包括MTP2, 3, ISUP, SCCP, TCAP, MAP, CAP 和 INAP等。

SMSC – 是一个在电信运营环境下进行生产部署运营的,健壮的短信服务中心平台,它是运行在一个现代可扩展构架上的中间件平台之上。SMSC实现短信转发,短信广播和群组短信功能。希望了解更多信息请下载TelScale SMSC 产品详细信息表。

USSD Gateway –是一个在电信运营环境下进行生产部署运营的,健壮的USSD网关,它是运行在一个现代可扩展构架上的中间件平台之上。它能帮助运营商快速创建和部署新的

基于对话的增值服务,通过提供一个中间平台将内容提供商和手机用户连接起来,向手机用户提供一个高速交互访问接口,实现对丰富内容的访问。

SIP Servlets – 是一个应用容器,实现将Java EE扩展实现对SIP以及融合应用的的快速开发和部署能力。其能运行在Tomcat JBoss AS/EAP和其他Java EE容器中。完全兼容于JSR 289 (SIP Servlets 1.1)。TelScale Media Server – 一个功能完备的基于Java的媒体服务器,其能通过MGCP (JSR-23, RFC 3435)和JSR-309 (Medica Server Control API)进行控制。

Media Server的产品目标是实现一个媒体网关平台,同时满足融合无线网络,有线网络,宽带网络访问和VoIP网络的需求。

Diameter Suite – 一个针对Diameter协议族的客户端,服务器和相关工具套件。实现了基本协议以及其他广泛使用的重要Diameter应用。能帮助快速开发

LTE/4G和IMS部件,例如应用服务器,HSS,CSCF,SLF等。它非常易于扩展来实现支持更多Diameter应用。

SIP Presence Server – 针对SIP网络提供客户端和服务器的表现服务,实现RCS以及来自IETF, GSMA, OMA, 3GPP和ETSI的标准,包括一个XDM服务器,一个Presence服务器和资源列表服务器(TBA)。

jSIP – 提供一个完全兼容于SIP/SDP/IMS的协议栈,并且支持故障冗余能力来满足电信级生产环境的需求。

五、总结

综上所述,支持视频的开源服务器主要有以上的几种,根据别人的开发经验和相关背景知识了解,接下来可以对OpenSip、SipXecs、FreeSwitch、Yate四个服务器进行更精细的研究,将实验环境搭建起来,有可能是OpenSip+Asterisk、SipXecs+Asterisk这样的服务器组合才能获得更好的视频体验效果。因为关于这一块的资料比较少,所以有一种可能性就是所有的这些开源项目都达不到满意的效果,这样带来的后果就是要重新考虑SIP服务器开源项目的可行性了。

相关推荐