今天,本来想多写点东西的,可是陪孩子玩的多了,就没有时间了。前两天有朋友问到FreeSWITCH有取代或超越Asterisk的历史地位的可能吗?简单回答一下:我认为,Asterisk的历史地位在于它是开源的VoIP软件的先驱,它的历史地位是谁都不可能替代的。但是,如果说到应用及规模,我倒认为FreeSWITCH的前景是很好的。下面是我以前翻译的一篇文章,与大家分享一下。该文章原载于:http://www.freeswitch.org.cn/2010/01/23/freeswitch-yu-asterisk.html ,也可以点击左下角的「查看原文」查看。
好多人问我如何使用 mod_xml_curl 进行用户验证,每次回答指导都很费劲。今天用 PHP 写了一个万能脚本,希望对大家有帮助。
Freeswitch路径 /usr/local/freeswitch(下述步骤全部以全路径为主)
很多初学FreeSWITCH的同学经常会问一个问题,我该使用哪个操作系统?FreeSWITCH支持Linux、Mac、Windows平台,Wiki页面上也有相关的说明。但随着时间的流逝,总会有一些文档来不及更新,因此,在安装时就总会遇到这样那样的问题。 FreeSWITCH的核心开发人员都使用Debian,但国内好像用CentOS的比较多,再加上各种版本差异,因此,这个问题其实没有一个最好的答案。我们一般会推荐Debian 10,但大多数人其实不听我们的推荐。 不过,Docker的出现在一定情况下解决了这个问题。因此,我们做了一个xswitch-free Docker解决方案,献给大家。希望大家能快速上手。
Kamailio:https://www.kamailio.org/(起源于SER)是一个开源的SIP服务器,主要用作SIP代理服务器、注册服务器等,即只处理信息,不处理媒体。如果你听说过FreeSWITCH:http://freeswitch.org.cn/或Asterisk,他们是典型的SIP B2BUA,主要用于VoIP媒体相关的处理。
笔者在使用 mod_sofia 的过程中发现有一些配置项非常有用,在这里分享给大家。
欢迎使用FreeSWITCH。本文最早写于2009年,最后更新时间是2022年6月4日。
今天来说说mod_soifa,它就是FreeSWITCH中的SIP模块。 FreeSWITCH并没有自己开发新的SIP协议栈,而是使用了比较成熟的开源SIP协议栈Sofia-SIP,以避免“重复发明轮子”。Sofia-SIP是由诺基亚公司开发的SIP 协议栈,它以开源的许可证LGPL发布。参见 http://sofia-sip.sourceforge.net/ 。 在FreeSWITCH中,实现一些互联协议接口的模块称为Endpoint。FreeSWITH支持很多类型的Endpoint,如SIP、H232等。这些不同的Endpoint主要是使用不同的控制协议跟其他的Endpoint通话。所以说,Endpoint一般是跟通话相关的。 有的读者可能会问,那么实现SIP的模块为什么不支持叫mod_sip呢?这是由于 FreeSWITCH的Endpoint是一个抽象的概念,你可以用任何的技术来实现。实际上mod_sofia只是对Sofia-SIP库的一个粘合和封装。除Sofia-SIP外,还有很多开源的SIP协议栈,如pjsip、osip等。最初选型的时候,FreeSWITCH 的开发团队也对比过许多不同的SIP协议栈,最终选用了Sofia-SIP。FreeSWITCH 是一个高度模块化的结构,如果你喜欢其他协议栈,可以自己实现如mod_pjsip或mod_osip等,它们是互不影响的。这也正是FreeSWITCH架构设计的精巧之处。 mod_sofia实现了SIP中的注册服务器,重定向服务器,媒体服务器、呈现服务器、SBC等各种功能。它的定位是一个B2BUA,它不能实现SIP代理服务器的功能。实现SIP代理服务器的开源软件有OpenSIPS、Kamailio等。它们可以很好的与FreeSWITCH配合工作。 在mod_sofia中,有一个概念是SIP Profile,它相当于一个SIP UA,通过各种不同的配置参数可以配置一个UA的行为。一个系统中可以有多个Profile,每个Profile都可以监听不同的IP地址和端口对。 一个Profile中有多个Gateway,Gateway可以直译为网关,它主要用于定义一个远端的SIP服务器,使FreeSWITCH可以与其他服务器通信。FreeSWITCH可以作为一个SIP客户端(UAC)向远端的网关进行“注册”;当然也可以不注册,而是使用与远端服务器对等的方式(俗称SIP Trunk,即SIP中继)相互通信(我们将在第14章讲到FreeSWITCH与与它系统相连的各种拓扑结构)。 FreeSWITCH可以作为注册服务器,这时候,其他的SIP客户端就可以向它注册。FreeSWITCH将通过用户目录(Directory)中的配置信息对注册用户进行鉴权。这些SIP客户端所代表的用户就称为本地SIP用户、简称本地用户。 牢记FreeSWITCH是一个B2BUA。如果Alice通过FreeSWITCH给Bob打电话,Alice首先向FreeSWITCH发起呼叫,对FreeSWITCH而言,这路通话就称为来话(Inbound Call);然后FreeSWITCH再去呼叫B,这路通话称为去话(Oubtound Call)。如果来、去话都是在与本地用户之间的,又称为本地来话和本地去话。 如果来、去话的发起者和目的地不是本的用户。而是以中继方式进行的,就称为中继来话或中继去话。但是,中继的叫法只是沿用传统的PSTN网络中的概念,在SIP术语中,本来是没有中继的概念的。 FreeSWITCH默认配置了internal和external以及internal-ipv6等三个Profile。其中internal主要用于本地用户的注册,它与external的区别除了使用的端口号不同外,它们之间最大的区别就是发送到internal这个Profile上的呼叫(INVITE请求)是需要鉴权的,但发送到external上的INVITE请求却不需要鉴权。这一点,用户在使用中可以慢慢体会。只要不被它们的名字所迷惑,知道所有的Profile其实都是一样的,这两个Profile只是FreeSWITCH默认提供的两个例子而已,它们之间的不同在于使用了不同的配置参数。 该模块是FreeSWITCH中最大的一个模块,也是最主要的一个模块,它的功能和配置都很多,留待我们日后慢慢讲。点击左下角的「查看原文」也可以看到更多的信息。 ---------------------------------------- 题图:Sofia 来自wikipedia Sofia是保加利亚的首都和最大城市,跟我们的mod_sofia可没有半毛钱关系啊。 ---------------------------------------- FreeSWITCH-CN是什么? FreeSWITCH-CN是FreeSWITCH中文社区,
FreeSwitch下配置DID的方法 首先介绍下什么是DID? 翻译为中文为“直接向内拨号”,该服务是由电话公司提供的,它使用户能够直接拨打PBX或VOIP系统中的分机号码,而无需求助于总机或自动话
IVR(交互式语音响应)的全称是Interactive Voice Response,它是一种自动电话系统,也就是我们常说的电话语音菜单。FreeSWITCH支持非常强大的语音菜单──你可以写简单的XML,或更灵活的Lua,当然还有Event Socket,Erlang Socket等,并且默认配置了一个功能齐全的例子demo_ivr,先注册一个分机,拨打5000,就可以听到菜单提示了。
上一篇学习了如何安装freeswitch,接下来我们利用2个voip软件来体验如何互打电话(注:仍然是mac环境,windows用户可参考mac上的做法,原理相通)
A curated list of awesome FreeSWITCH resources, modules, frameworks, libraries and software. Inspired by awesome-go.
在SIP终端注册或呼叫时,为了安全起见,SIP Server通常需要对用户(主叫)的身份进行认证。
大家好,我是杜金房,此次分享和双向通讯服务器FreeSWITCH以及WebRTC有关。首先我会为大家简单介绍FreeSWITCH,鉴于FreeSWITCH主要用于通信领域,我也会介绍WebRTC并阐述FreeSWITCH与WebRTC的关系,同时结合FreeSWITCH的其他功能和使用场景与其功能以及所使用的多媒体库,进一步探索AI技术加持下FreeSWITCH的未来发展。
前几天有网友问黑名单怎么做,我说自己写个Lua脚本查数据库吧。后来又查了一下,FreeSWITCH竟然有一个mod_blacklist,这不就是黑名单嘛。
只是合同签得简单,要做的工作却远超范围,负责人也是多年的朋友了,看在私人的友情上,就没那么计较,直接帮着解决。
mod_skypeopen是一个有意思的模块,它提供FreeSWITCH与Skype的互通。 Skype是世界上广泛使用的VoIP软件,不过,在被微软收购后表现不怎么样,最近又传出Skype将停止提供第三方API接口,也就是说FreeSWITCH将无法与新版的Skype互通。 不过,旧版的Skype好像不受影响,而且,不管以后FreeSWITCH是否能与Skype互通,mod_skypopen对我们都有借鉴意义。 mod_skypopen的前身是mod_skypiax,后来才改为此名。该模块实现的很有意思。Skype不是提供API吗?也就是说它允许外部的程序通过一定的API控制Skype(相当于通信信令)。所以,理论上讲,就可以将控制Skype的部分代码放到FreeSWITCH中,而仍然需要启动一个Skype实例登录到实际的Skype网络中与其它Skype进行通信。在Linux中,通过使用内核中的虚拟声卡,可以指定不同的Skype实例使用不同的虚拟声卡,而在FreeSWITCH中通过访问这些虚拟声卡读写音频数据(相当于媒体流),进而完成信令和媒体的交互。 最初的Skype一个Skype账号在一台主机上只允许登录一次,所以我们最初使用时,注册了20个Skype账号,在一台Linux服务器上启动了20个Skype实例,并分别用不同的账号注册上去。对于FreeSWITCH而言,这20个实例就相当于20条外线,我们的SIP账号就可以通过这20条“Skype”外线打电话到其它的Skype账号上。 有什么用呢?当初我们在做在线一对一英语口语教学的,美国的老师使用SIP客户端,而学员一般使用手机(SIP客户端在我国不怎么稳定)与老师对话。但问题是,有的学员手机信号不好,有的呢,千里迢迢漫游到北京去上学习班(但却买我们的网络口语教学课程),无法支付高昂的漫游费。而使用Skype就解决了这一问题。 后来,Skype允许在一台主机上用同一账号多次登录,所以,我们就用同一个Skype账号登录20个Skype实例,实现了类似模块中继线的功能——打出去对外显示一个号。 当然,该模块是跨平台的,在Windows上也可以使用,也支持多账号。当前闲着没事的时候,我也实现了Mac来台上的支持,只不过后来没有继续开发,也没有合并到主分支里去。 mod_skypopen也是一个Endpoint。 ---------------------------------------- 题图:Before I die 来自 Google ---------------------------------------- FreeSWITCH-CN是什么? FreeSWITCH-CN是FreeSWITCH中文社区,我们的官方网站是 http://www.freeswitch.org.cn 。FreeSWITCH-CN同时也是一个微信公共账号,可以通过点击本页最顶端的“FreeSWITCH中文社... ”,或在通迅录->订阅号中搜索“FreeSWITCH-CN”来订阅,也可以到官方网站上扫描二维码。当然,不管是新用户还是老用户,随时都可以输入m或1显示本账号的主菜单。 FreeSWITCH-CN的账号维护者是Seven Du,在此,他会分享多年的FreeSWITCH使用经验,分享一些对开源VoIP软件以及软件社区的思考,并隔三差五的解答一些粉丝关心的问题。Seven Du于2007年听说、2008年开始使用FreeSWITCH,2009年创办FreeSWITCH-CN中文社区,2011~2013连续三年参加了在美国芝加哥举办的ClueCon全球VoIP开发者大会,该会议是由FreeSWITCH核心团队主办的。 如果你在学习和使用FreeSWITCH的过程中,有什么有趣的故事,也欢迎与我分享。移动设备上打字不方便,如果想写长的留言可以发邮件到 wechat@freeswitch.org.cn 。
在工作中客户就是上帝,上帝提出的需求除了满足还有什么办法嘞。这不嘛,有一次客户就提出一个需求是部分分机需要开启语音留言功能,每个用户一个调听留言密码,最好是和分机注册密码关联起来(其实就是使用相同的密码)。这部分本身的FreeSWITCH是支持的,有一点不同的是在客户的整个系统架构中FreeSWITCH前使用了一台kamailio作为代理,负责用户注册这部分功能。
今天,说说mod_enum。说起enum,千万不要跟C语言里的枚举类型(enum)混了。ENUM是E.164 Number to URI Mapping的综合,即E.164号码到URI的映射关系。如果说到这里你还不理解的话,想象一下域名到IP地址的映射关系吧。当你在Internet上访问一个域名(网址)时,如www.freeeswitch.org.cn,将先由DNS服务器将该域名翻译成一个IP地址,进而,你的注册品会访问该IP地址以获取它想要的网页内容。ENUM也是一样,它只不过是使用了类似DNS的技术,将一个E.164的电话号码(也就是我们常用的电话号码)映射为一个相应的VoIP地址(可以是SIP、H323或Jabber的地址),这样,我们就可以通过拨打一个普通的电话号码来访问一个VoIP地址。提供这个号码映射关系的网站有e164.org和freenum.org,有兴趣读者可以试一下。如果读者比较仔细的话,可以看到在FreeSWITCH默认的Dialplan中有如下的设置: <extension name="enum"> <condition field="
随着现代企业的发展,通讯设备占据了越来越重要的地位。在这个设备中,分机无疑是必不可少的一部分。而分机之间互相打电话,也是企业内部生产、管理和沟通的常见现象。
在呼叫中心系统中,有二类特殊的应用场景,即所谓的“群振”(也叫“共振”或“同振”)以及“顺振”。
昨天由于太忙,没有发文章。今天看了一下统计信息,3篇图文信息的阅读人数分别人34、41、20,虽然最后一篇发的比较晚,但也过去两天了,看来,周末时间看的人比较少。大家可能都去娱乐了吧,看来周末我小休一下也是对的。
最近,在测试一个比较复杂的FreeSWITCH功能和应用场景,这个场景是我们自己开发的,在远程服务器上开发,实验环境也不容易在本地重现,关键的问题是必须有一个远方的分机配合测试。
上面的命令表示,发起1个名为test的会话,同时拨打1004用户,如果该用户接听了,就相当于加入会议。注:如果1004是第1个加入会议的人,此时会议室还没有人,只能听到背景音乐等待其它人加入。
默认情况下,拨打内部用户时,freeswitch需要该用户注册了才能对其发起呼叫,否则会提示-ERR USER_NOT_REGISTERED
在QQ群里老是看到有的朋友问到不同的模块都是干什么的。因此,我打算从今天起,把所有的模块都大体讲一遍。如果有时间我就多写点例子,时间少的话就写少点。 当然,说到模块,我们还得从FreeSWITCH的架构说起。我们先用一两天的间说一下FreeSWITCH的整体架构以及模块列表,然后,就可以式一一介绍所有模块了。当然,在讲的期间大家有什么问题话,也可以向我提问,我会有选择性的回答或“插播”一下。 FreeSWITCH的整体架构我们已经在最前面看到了,更详细一点的,我们看下图。
HTTP协议是当今最流行的通信协议。FreeSWITCH即可以作为一个HTTP Client,也可以作为一个HTTP Server与其它系统对接。
准备接下来写一些FreeSWITCH与设备对接的内容。GrandStream在近两期培训中赞助了不少设备,先从GrandStream讲起吧。
文本主要介绍如何在网页web端上注册sip账户,进而实现拨打和接听电话。不用再额外安装sip软电话软件以及实体的电话机,方便CRM等系统集成电话呼叫。
在FreeSwitch控制台中,输入上面的命令行(on为打开,off为关闭),然后用Client(比如:免费开源软电话MicroSIP)注册,此时FreeSwitch中会输出4段SIP报文,分别对应认证过程中的4个阶段,类似下面这样:
在《FreeSWITCH权威指南》中,我们曾讲过一个在同一台电脑上启动多个FreeSWITCH实例的例子。当时所有实例都使用同一个IP,下面,我们使用另一种方式实现,每个FreeSWITCH使用一个IP。
XSwitch默认有两个SIP端口的监听,一个是default的带鉴权,一个public的不带鉴权。通常带鉴权的端口会直接暴露在公网,让用户可以通过公网直接注册。而不带鉴权的端口则需要通过服务器的安全策略或ACL等规则,遵循白名单原则放行访问。因此需要防止SIP暴力攻击的也主要是defalut所配置的sip端口,这里要配合Fail2ban去拦截IP,需要先对default的profile增加一个配置,让其能将鉴权异常的IP打印的freeswitch.log日志文件内。
最近在调研SIP代理、SIP集群和媒体集群的能力,了解到OV500这个项目,对理解Freeswitch的能力,Kamailio作为信令代理的配置等实现的学习还是很有帮助的,这个GITHUB项目地址:OV500 , 架构模型如图:
好多人都问FreeSWITCH崩溃如何调试,昨天,我正好遇到一个崩溃的情况,很快就找到原因并修复了,简单记录一下,供大家参考。
伪变量转换函数大部分在 pv 模块中处理,官方文档记录的很全面,但是给的例子比较少。本文列举比较常用的转换函数
Portainer是一个Docker可视化管理工具,可以对方便地对Docker镜像进行管理。
题外话:昨天是2020年元宵节,正值"新型肺炎"第二阶段防治关键时期,返沪后按规定自觉在家隔离14天,不出去给社会添乱,真心希望这次疫情快点过去。
Kamailio典型的仅支持Linux操作系统,直接在操作系统上安装也很方便。当然,最方便的是直接使用Docker启动Kamailio。Docker可以在Windows、macOS和Linux等宿主机操作系统上运行,所以,不管你使用何种操作系统,都可以很方便地运行Kamailio。
在日常开发中,我们经常会到"有状态"服务设计与"无状态"服务设计,何谓“无状态”?
IVR(Interactive Voice Response)交互式语言应答,是呼叫中心的1个经典应用场景,FreeSwitch官方有一个利用lua实现的简单示例,大致原理是利用lua脚本+TTS实现,记录一下:(环境:FreeSwitch 1.10.11 + Windows 10)
sipp是一个针对SIP协议进行测试的免费开源工具,可运行于windows/mac/linux,官方地址:http://sipp.sourceforge.net/。
https://webrtchacks.com/webrtc-meets-webvr/
编者按:视频会议已成为日常办公不可或缺的一部分,为远程交流的人们提供了许多便利。本次RTSCon 2022会议,由RTS社区和LiveVideoStack音视频技术社区联合出品,很荣幸地邀请到了来自vivo的架构师李莹莹老师,为我们介绍了FreeSWITCH架构、vivo自研的视频会议架构、以及在实践过程中应用到的一些方案等。
今天,我们来看dialplan/default/0000_local_extensioins.xml。
在这个数字化的时代,我们的生活已经被各种应用程序和在线服务所包围。我们通过电子邮件、社交媒体、在线购物等方式进行沟通和交流。然而,有一种方式,尽管已经存在了一段时间,但仍然被许多人忽视,那就是通过浏览器Web拨打电话。这种方式不仅方便快捷,而且能够打破传统的通信模式,连接无限可能。
经常关注我们FreeSWITCH中文社区的人知道,从2013开始,每年我们都会举办多次FreeSWITCH培训。
FHS的全称是Filesystem Hierarchy Standard,即文件系统层次结构标准。
我们所谓的“标准”解决方案,并非是指这个解决方案是标准的。而是在做视频会议的过程中,FreeSWITCH作为一个服务器,会面对不同类型的客户端以及各种硬件的终端。由于它们使用了各种各样的标准协议,是我们没办法修改的,所以称它们为标准的客户端。而FreeSWITCH视频会议“标准”解决方案就是指针对这些不可修改的标准客户端所做的一种解决方案。
基于Flash的实时多媒体通信是基于Adobe的RTMP协议进行的。FreeSWITCH中通过“mod_rtmp”实现了一个基于RTMP协议的Endpoint,可以支持用Flash实现的软电话。虽然随着WebTC的出现,Flash前景不再被看好,但是在一定范围内它还将顽强的存在。而且,作为有别于SIP模块(“mod_sofia”)的另外一个Endpoint,也很有参考和借鉴意义。
12月3日,一年一度的RTSCon大会如期举行。本次活动由RTS社区、小樱桃科技和LiveVideoStack联合主办,场面热烈、大家提问踊跃,大会获得圆满成功。 本次RTSCon依然在线上进行,使用了LiveVideoStack的直播系统。会议邀请了腾讯、百度、贝壳等公司的行业内知名专家数十名,跟大家一起分享领域内最新技术与经验。 上午的会议由烟台小樱桃网络科技有限公司的杜金房先生主持,杜老师对RTSCon做了简短的介绍。RTSCon沙龙始于FreeSWITCH开发者沙龙,后者自2012年就开始了,是
领取专属 10元无门槛券
手把手带您无忧上云