opensips简介

1、引入

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

2、OpenSIPS介绍

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

2.1、功能特点

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

SIP注册服务器/代理服务器(lcr、dynamic routing、dialplan)/重定向服务器
 SIP presence agent
 SIP B2BUA
 SIP IM Server
 SIP to SMS/XMPP网关
 SIP to XMPP网关
 SIP 负载均衡
 SIP NAT traversal

2.2、基本应用配置

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

第一部分全局变量的设置,通过一条语句就能指定用于侦听接收sip消息的端口和传输层协议。

第二部分负责模块的加载和参数配置。以之前的OpenSIPS的负载均衡功能配置为例,需要加载load_balancer模块,并进行配置。

第三部分是sip消息的路由和功能应用。还是以OpenSIPS的负载均衡功能为例。

从以上应用示例可以看到,通过在opensips.cfg中进行简单的配置,就能实现强大的功能。

2.3、系统结构

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产品。

3、与其它开源项目共同搭建VOIP服务

OpenSIPS提供了以上那么多的功能,那OpenSIPS是不是已经实现了PBX的功能了?不是!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消 息的转发和负载均衡,就可以轻松地实现各种语音业务以及规模扩展。如下图所示。

4、小结

从文中介绍可以看出,OpenSIPS是一个成熟的电信级SIP Server平台,可广泛应用于SIP应用的路由分发、负载均衡,可用于搭建SIP代理,提供SIP注册服务等。而且目前OpenSIPS自身也提供 SIP Presence以及IM功能。同时,应该注意的是OpenSIPS本身并不提供媒体相关服务,如呼叫中心、VoiceMail等业务,该部分业务可通过 FreeSwtich、sipXecs等平台实现。

参考文献:
[1].OpenSIPS:  http://www.opensips.org/
[2] FreeSwitch wiki: http://wiki.freeswitch.org/wiki/Main_Page
[3] sipXecs: http://www.sipfoundry.org/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS中关于clientWidth、offsetWidth、scrollWidth

网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offsetWidth (包括边线的宽);网页可见区域高: document.body.offsetHeight (包括边线的宽);网页正文全…

shell 执行失败重试_Uipath 机器人总是运行失败怎么办?

要知道为什么RPA机器人容易失败,首先了解下它和常规的应用系统有哪些区别。常规应用系统,就像程序员自己创造了一个世界、一个域,在这个世界里创造它的人就是主宰。出现BUG的风险是相对可控的,顶多是功能用不了。而RPA项目&#x…

c mysql安装教程视频_MySQL安装教程 - Windows安装MySQL教程 - 小白式安装MySQL教程 - 青衫慧博客...

版权声明本文转发自旧站点萧瑟云日志,近期考虑准备将旧站进行关闭(没有精力维护),部分文章将会迁移至本站。文章发表于:2017-10-28 12:32:03前言上次给大家带来了SQL Server的小白式安装教程,这次再次带来一个MySQL的小白式安装教…

PJSIP UA分析(1)--PJSUA主函数

1 intmain(intargc, char*argv[])2 {3 do{4 app_restart PJ_FALSE; //PJ_FALSE是一个宏,一旦用户调用pjsua可执行文件进入该循环,那么默认只执行一次退出5 //如果需要再次循环,那么在下面函数中…

锁定表头和固定列(Fixed table head and columns)

前段时间需要这个功能,但是找了很多都不能完美的实现,不是只能锁定表头,就是浏览器兼容问题什么的,在此就自己做了一个锁定表头和列的js方法,依赖于JQuery。 因为方法很简单,就未封装成插件的形式&#xff…

游戏详细设计说明书_宜家的说明书设计脑洞太大了!

平常我们看到的说明书是像这样纯文字解说的或者是规范的文字配图这些说明书一般都是注重文字的上表达而大家熟悉的家居品牌宜家将说明书创意玩出了新境界!↓↓↓这不,最近由于全球疫情严峻期间宜家的全新说明书手册搜罗了各种纸上游戏意为帮助大家打发无…

centos删除php_centos如何卸载php

查看php版本php -v查看php相关软件包#rpm -qa|grep php(视频教程推荐:linux视频教程)提示如下:#php-pdo-5.1.6-27.el5_5.3#php-mysql-5.1.6-27.el5_5.3#php-xml-5.1.6-27.el5_5.3#php-cli-5.1.6-27.el5_5.3#php-common-5.1.6-27.el5_5.3#php-gd-5.1.6-27…

PJSIP UA分析(2)--PJSUA注册

1、一开始是回调使用的函数,例如on_incoming_call当来电话的时候,pjsip会自动去调用你写的这个函数,前提是你在初始化pjsua的时候设置了on_incoming_call &on_incoming_call, 2、error_exit退出应用所需要的操作 3、main函数…

cgblib 代理接口原理_Java开发者你还不知道?告诉你Dubbo 的底层原理,面试不再怕...

前言平常我们在构建分布式系统的时候,一般都是基于 Dubbo 技术栈或者是SpringCloud 技术栈来做。早期其实最先比较流行的是Dubbo,我记得我们当时有个部分的老大就是用的是Dubbo 来构建的一个系统,到后面才出来的 SpringCloud,由于…

包含对流环热,热流边界,等温边界的稳态热传导方程的FEM求解。

以下面的问题为例:对于如图所示的平面传热问题, 若上端有给定的热流-2W/m2,即从下往上传输热量,结构下端有确定的温度100,周围介质温度为20,在两侧有换热,换热系数为α100W/㎡/K,热导…

php安装扩展步骤,PHP扩展安装方法步骤解析

php扩展安装方法极简单. 也遵循3大步.但多出一个phpize的步骤.1.pecl.php.net 在右上解的输入框 中输入需要的扩展 比如 redis2.搜索完成后会看到两个蓝色的框 . 下方有个表格. 表格内容如 search results (1 of 1) 再下面有一行不起眼的结果. 其中就有一个redis(搜索什么显示什…

python生成动态二维码实例_python生成动态个性二维码(示例代码)

1 安装工具 2 生成普通二维码 3 带图片的二维码 4 动态 GIF 二维码 5 在Python程序中使用 一、安装 首先在python环境下运行, 打开cmd进入python27 进入scripts 然后在scripts输入命令:pip install myqr二、 生成普通二维码 安装了 myqr 之后&#xff0c…

MFC取消菜单栏

在CMainFrame的OnCreate()中添加如下代码://去掉标题栏及其他样式SetWindowLong(this->m_hWnd,GWL_STYLE,0);//去掉边框及其他样式SetWindowLong(this->m_hWnd,GWL_EXSTYLE,0);//取消菜单栏this->SetMenu(NULL); 在CView中的OnCreate()中也去掉边框 //去掉…

php的cookie变量作用,PHP语言中cookie的作用

PHP语言中cookie的作用时间:2015-11-9Cookie的概念最早是由Netscape在1994年提出来的,它是保存在浏览器中的小信息包,更确切地说,Cookie是保存在客户端硬盘里的,由字符串组成的小文本文件.文本文件的命令格式如下;用户名网站地址[数字].txt举个例子,如果用户在系统盘…

如何查看Linux版本号(内核版本号和发行版本号)

首先,要分清内核版本号和发行版本号的区别。 因为所有linux都是使用kernel.org上来的内核来作为发行版的基础的,所以内核版本号的高低大致能体现该linux版本的新旧。 而发行版本的版本号完全是各发行商自己定义的,不能用来和其它发行版本的版…

matlab武汉理工大学数值分析线性函数拟合实验_「首席架构师推荐」数值计算库精选...

这是一个著名的数值库列表,这些库用于软件开发中执行数值计算。它不是一个完整的列表,而是一个包含Wikipedia上文章的数字库列表,很少有例外。典型库的选择取决于一系列不同的需求,例如:期望的特性(例如:大维线性代数、并行计算、…

DCE和DTE的区别

DCE(数据通信设备或者数据电路终端设备):该设备和其与通信网络的连接构成了网络终端的用户网络接口。它提供了到网络的一条物理连接、转发业务量,并且提供了一个用于同步DCE设备和DTE设备之间数据传输的时钟信号。调制解调器和接口…

php 弹出保存对话框,如何在不将页面留在PHP中的情况下强制保存为对话框?

当使用StijnvanBael的代码时,请小心,它会使您面临一些严重的安全漏洞攻击。尝试以下方法:--- download.php ---$allowed_files array(file.pdf, otherfile.pdf);if (isset($_REQUEST[file]) && in_array($_REQUEST[file], $allowed_files)){$filename $_REQUEST[file…

JSONP跨域原理和jQuery.getJSON用法

JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。本文主要介绍JSONP跨域原理,一起来看。 JSONP是一个非官方的协议&…

window10安装python2.7_window10下python2.7安装pip报错

get-pip.py 文件内容来源于(将网页内容保存) https://bootstrap.pypa.io/get-pip.py 报错信息 D:\softs\python\Python27>python get-pip.py DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 wont…