只是合同签得简单,要做的工作却远超范围,负责人也是多年的朋友了,看在私人的友情上,就没那么计较,直接帮着解决。
就在前几天『FreeSWITCH 1.10.0』新版本已经发布了,简单的介绍一下此次更新的内容吧。
大家好,我是杜金房,此次分享和双向通讯服务器FreeSWITCH以及WebRTC有关。首先我会为大家简单介绍FreeSWITCH,鉴于FreeSWITCH主要用于通信领域,我也会介绍WebRTC并阐述FreeSWITCH与WebRTC的关系,同时结合FreeSWITCH的其他功能和使用场景与其功能以及所使用的多媒体库,进一步探索AI技术加持下FreeSWITCH的未来发展。
这是资源站点,自行选择版本:http://files.freeswitch.org/freeswitch-releases/
This document covers information about the SBC Setup.
Kamailio:https://www.kamailio.org/(起源于SER)是一个开源的SIP服务器,主要用作SIP代理服务器、注册服务器等,即只处理信息,不处理媒体。如果你听说过FreeSWITCH:http://freeswitch.org.cn/或Asterisk,他们是典型的SIP B2BUA,主要用于VoIP媒体相关的处理。
最近在调研SIP代理、SIP集群和媒体集群的能力,了解到OV500这个项目,对理解Freeswitch的能力,Kamailio作为信令代理的配置等实现的学习还是很有帮助的,这个GITHUB项目地址:OV500 , 架构模型如图:
基于Flash的实时多媒体通信是基于Adobe的RTMP协议进行的。FreeSWITCH中通过“mod_rtmp”实现了一个基于RTMP协议的Endpoint,可以支持用Flash实现的软电话。虽然随着WebTC的出现,Flash前景不再被看好,但是在一定范围内它还将顽强的存在。而且,作为有别于SIP模块(“mod_sofia”)的另外一个Endpoint,也很有参考和借鉴意义。
好久没有写模块了,今天写写mod_xml_rpc这个模块。 这是一个比较古老的模块,它相当于自带了一个Web服务器,主要为FreeSWITCH提供了XML RPC接口,允许应用程序通过XML RPC进行远程过程调用,执行FreeSWITCH中的API。 该模块默认是不加载的,如果使用的话,可以通过 load mod_xml_rpc命令加载。 加载完该模块后,它默认监听8080端口。用浏览器打开该端口(如http://localhost:8080)就可以看到一个Web页面。注意,该页面默认使用了HTTP
前一阵,我们讲了mod_rtc。mod_rtc是一个纯媒体的模块,目的是为了支持WebRTC。然而,任何的通信都需要一定的信令支持,mod_verto就是配合mod_rtc的信令模块。 众所周知,WebRTC从诞生的第一天起就只定义了媒体的交互和传输,而把信令留给大家自己实现,以便有更大的自由度。最初,大部分WebRTC的例子都是基于GAE的,但在电信的VoIP领域,SIP还是占统治地位的,因而,包括FreeSWITCH在内,又有一些SIP代理和软交换设备实现了配合WebRTC使用的SIP信令,这但是SIP over WebSocket。FreeSWITCH对SIP over WebSocket的支持是直接扩展了Sofia-SIP协议栈。 但无论如何,虽然SIP与传统的VoIP协议如H323相比,脱离了老式的电信信令思维,采用了类似HTTP协议的文本协议,但,它从电信领域诞生的基因决定了它还是很难融入互联网,退一步讲,人们还是认为SIP通信专业性太强了,SIP就是SIP,互联网就是互联网。 单从协议内容角度讲,SIP对于浏览器尤其是对于移动浏览器来说,还是有些庞大了。而基于文本的SIP协议解析起来对浏览器来说,即使不是一种负担,也不是非常的优雅。对浏览器来说,最适合的数据格式是JSON已是不争的事实。 我们很高兴地看到,FreeSWITCH团队开放了mod_verto。它采用了JSON及JSON-RPC相关的信令协议,非常优雅的与mod_rtc相配合,将热闹的互连网与冷冰冰的SIP通信结合在了一起。也就是说,FreeSWITCH不再是互联网从业者眼里专业的运动员,而跟MySQL,Apache一样,可以实实在在的融入互联网了。 在在WebRTC设计之初,就非常重视安全问题,因而,一切都是加密的,不管是在媒体层还是在信令层,这是个好事,唯一比较麻烦的是,对于没有耐心的实践者来说,你在跑通mod_verto前要设置好你的Web服务器以及证书。 笔者经过测试,顺利的跑通了该模块。有兴趣的读者也可以试试啊,步骤有些复杂,点击下面的「阅读原文」原文可以看到详细的Wiki说明。 https://confluence.freeswitch.org/display/FREESWITCH/mod_verto
题外话:昨天是2020年元宵节,正值"新型肺炎"第二阶段防治关键时期,返沪后按规定自觉在家隔离14天,不出去给社会添乱,真心希望这次疫情快点过去。
静态链接还是动态链接?在这一点上,FreeSWITCH是怎么做的?接下来我想跟大家讨论一下这个问题。
freeswitch是啥就不多说了,可以简单理解为一个功能强大的纯软件实现的电话交换机(俗称:软交换)。官网地址:https://freeswitch.com/,它可以运行于windows/mac/linux,完全跨平台,而且开源免费。下面介绍mac环境的安装及遇到的坑。
今天,本来想多写点东西的,可是陪孩子玩的多了,就没有时间了。前两天有朋友问到FreeSWITCH有取代或超越Asterisk的历史地位的可能吗?简单回答一下:我认为,Asterisk的历史地位在于它是开源的VoIP软件的先驱,它的历史地位是谁都不可能替代的。但是,如果说到应用及规模,我倒认为FreeSWITCH的前景是很好的。下面是我以前翻译的一篇文章,与大家分享一下。该文章原载于:http://www.freeswitch.org.cn/2010/01/23/freeswitch-yu-asterisk.html ,也可以点击左下角的「查看原文」查看。
历经千辛万苦,今天,终于算是把我关于FreeSWITCH的新书编辑一遍了。PDF版全书正好800页,接下来该看看怎么删了。不过,后面的编辑修改之路还得很长,太多细节暂时还不能透露,大家先不要着急啊。
上一篇学习了如何安装freeswitch,接下来我们利用2个voip软件来体验如何互打电话(注:仍然是mac环境,windows用户可参考mac上的做法,原理相通)
但对于企业的座机来说却没有黑名单功能,如果你恰好使用了FreeSWITCH作为你们的语音平台,那么一切就变得简单了,我们使用lua就可以实现一个这样的功能,所有来话都去查询下是不是在黑名单中,最后决定是否去接听。
这两天我一直在做视频转码,试了ffmpeg、libbpx以及Cisco新开放的OpenH264。尤其是最后的OpenH264,文档很少,刚刚开源,也找不到什么参考资料,代码嘛,写得也不怎么清爽,还是C++的。因此,这几天我的FreeSWITCH应该是Crash了不下100次,因此,便没有时间写微信了。
准备接下来写一些FreeSWITCH与设备对接的内容。GrandStream在近两期培训中赞助了不少设备,先从GrandStream讲起吧。
编者按:在本次RTSCon2022中,我们邀请到了烟台小樱桃网络科技有限公司CTO,FreeSWITCH中文社区创始人 杜金房,为大家详细分享双机、三机,到可弹性伸缩的通信集群建设经验。包含一对一通话、呼叫中心及音视频会议、日志监控等场景,包含FreeSWITCH、Kamailio、WebRTC、MCU、SFU、Docker、K8S、ETCD、NATS、Loki等相关技术。
我们所谓的“标准”解决方案,并非是指这个解决方案是标准的。而是在做视频会议的过程中,FreeSWITCH作为一个服务器,会面对不同类型的客户端以及各种硬件的终端。由于它们使用了各种各样的标准协议,是我们没办法修改的,所以称它们为标准的客户端。而FreeSWITCH视频会议“标准”解决方案就是指针对这些不可修改的标准客户端所做的一种解决方案。
网页视频实时通话最大的优势就是“标准化”,它解决的问题就是给所有需要进行实时通信的终端提供一套统一的、开放的实时通信能力描述和连接建立标准,只要符合网页视频实时通话的规范,通信终端的形态和运行环境就是透明的。
FreeSWITCH是一个开源、高性能的多协议的媒体引擎和通信平台。TDengine是一个开源、高性能、分布式,支持SQL的时序数据库。
相信大家可能接到过一些电话,听上去不象是真人打过来的,比如:通知“您的信用卡到期了”,或者“您订的飞机航班取消了,请尽快改签或取消行程”,这种就是所谓的“自动外呼”系统,技术上讲,可以通过 esl inbound模式实现(注:对esl不熟悉的朋友,戳这里)
playback是FreeSWITCH中的一个Application,用于播放声音文件。在FreeSWITCH中有一个用于文件格式的抽象层,我们可以根据格式编写文件模块,然后就可以播放自定义格式的文件,当然也可以按自定义文件格式录音。
首先是有一个网友在QQ里私下问我问题,一般来说,我是不会私下回答任何问题的。因此,我让他到知识星球里问,后来就看到知识星球里有人问一个在NAT环境下电话不通的问题(不知道是不是跟私聊的一个人,私聊跟知识星球里对不上号,呵呵)。
大多数情况下(之所以说大多数情况是因为最末尾还有一个authenticated),都可以用它来检测网络是否断开,如果断开了,可以自己写代码重连(注:0.9.2版本依赖的netty较老,esl client本身也并没有重连逻辑)。
在日常开发中,我们经常会到"有状态"服务设计与"无状态"服务设计,何谓“无状态”?
随着现代企业的发展,通讯设备占据了越来越重要的地位。在这个设备中,分机无疑是必不可少的一部分。而分机之间互相打电话,也是企业内部生产、管理和沟通的常见现象。
sipp是一款VoIP测试工具,日常开发过程中会使用到该软件,但其自身携带的pcap文件夹里面的rtp数据包太小,rtp长时间测试的场景会出现媒体异常的情况,需要制作长时间pcap文件以满足测试,这里记录下使用sipp作为uac和uas对接freeswitch重放长时间rtp数据测试的过程。
欢迎使用FreeSWITCH。本文最早写于2009年,最后更新时间是2022年6月4日。
FHS的全称是Filesystem Hierarchy Standard,即文件系统层次结构标准。
FreeSWITCH从代码树中删除了mod_unimrcp(https://github.com/signalwire/freeswitch/commit/3c7e8ff989355bf518eabaeea83036585e4782b7)。
A curated list of awesome FreeSWITCH resources, modules, frameworks, libraries and software. Inspired by awesome-go.
文本主要介绍如何在网页web端上注册sip账户,进而实现拨打和接听电话。不用再额外安装sip软电话软件以及实体的电话机,方便CRM等系统集成电话呼叫。
https://webrtchacks.com/webrtc-meets-webvr/
总是报错缺少文件数据参数,另外发现一个可以让freeswitch瞬间崩溃的方法: originate user/1000 &loop_playback +2 ivr/8000/ivr-welcome_to_freeswitch.wav,把括号去掉,在Freeswitch Console中输入 ,马上就崩了(windows 10环境+freeswitch 1.6.18)
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 。
今天来说说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做监控或者功能扩展开发,有没有专门的对外的插件接口之类的。我想,使用ESL可能比较合适。在我们书里第十一章有简单的介绍,可以点击左下角的查看原文查看。
今天,来说一说mod_cluechoo这个模块。在QQ群中看到好多朋友对此很好奇。 从名字看,不知道该模块是干什么的,而Wiki上对它的介绍也就只有一句话:mod_cluechoo implements Toyoda Masashi's famous Steam Locomotive (SL) command for FreeSWITCH。即,该模块在FreeSWITCH中实现了Toyoda Masashi的蒸汽机车命令。那么,该蒸汽机车又到底是什么东东呢?说来话长,可以看这里: http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/index_e.html 。在UNIX系统上有一个ls命令,但有时候容易输错,成了sl,便会提示命令错误。而该蒸汽机车实现了一个sl命令,即蒸汽机车(Steam Locomotive)的英文缩写。实际上,该程序只是一个小小的玩笑,没什么实际用处。 该程序主要上对SL的介绍是这样的:SL (Steam Locomotive) runs across your terminal when you type "sl" as you meant to type "ls". It's just a joke command, and not usefull at all. Put the binary to /usr/local/bin. 那么,在FreeSWITCH中怎么玩呢? 该模块是默认编译和加载的,在FreeSWITCH控制台上重新加载一下该模块,便可以从日志中看出一些信息: freeswitch> reload mod_cluechoo 2014-01-18 22:30:17.610597 [CONSOLE] switch_loadable_module.c:1464 Successfully Loaded [mod_cluechoo] 2014-01-18 22:30:17.610597 [NOTICE] switch_loadable_module.c:269 Adding Application 'cluechoo' 2014-01-18 22:30:17.610597 [NOTICE] switch_loadable_module.c:315 Adding API Function 'cluechoo' 从上面的日志中可以看出,该模块实现了一个cluechoo App,以及一个cluechoo API。如果对App和API是什么东东不了解的同学可以复习一下前几天发的文章(我发文章有时候也是有伏笔的,呵呵)。 接着在命令控制台上输入以下命令,便会看到一辆小火车开过: freeswitch> cluechoo 那么App怎么使用呢?构造如下的Dialplan,拨打cluechoo试一试。 <extension name="cluechoo"> <condition field="destination_number" expression="^cluechoo$"> <action application="answer" data=""/> <action application="cluechoo" data=""/> </condition> </extension> 到这里,如果还不明白的同学继续回去看前几天讲的API和App。有兴趣的同学也要以看一看其源代码实现,挺有趣的哟 :) 。 ---------------------------------------- 题图:Steam Locomotive 来自FreeSWITCH cluechoo ---------------------------------------- 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中文社区,2
使用docker容器搭建这个环境,方便多服务的启动和打包验证,虽然之前也做了一次,但上一次做kamailio代理freeswitch验证的时候,使用了给docker配置独立IP的方式,确实网络上简单很多,这次使用的是docker的端口转发,多了几个问题,最简单的是docker udp端口池如何配置,然后docker会内部创建一个172.17.0.1的网关,充当docker容器和外头网络通信的路由功能,所以出现了新的问题;
昨天在微信公共账号上接了一些粉丝,并发了一篇图文消息。今天盘点一下,送达人数59,图文页阅读人数12,共收到消息回复3条。看来,我的粉丝还不够活跃啊。
本模块实现了系统大部分的Application(即App)。dptools是Dialplan Tools的简写。也就是说,这些App大部分是在Dialplan中用的。
在SIP终端注册或呼叫时,为了安全起见,SIP Server通常需要对用户(主叫)的身份进行认证。
API和App是FreeSWITCH实现的两个基本的接口(INTERFACE)。API相当于命令行接口,它是独立存在的命令,App则是与一个Channel相关的,在Channel上执行的。
在上一篇文章《FreeSwitch Linux(CentOS 6.5) 安装教程》中介绍了Linux(CentOS 6.5)版的安装,这里主要讲一下windows下的安装。
在QQ群里老是看到有的朋友问到不同的模块都是干什么的。因此,我打算从今天起,把所有的模块都大体讲一遍。如果有时间我就多写点例子,时间少的话就写少点。 当然,说到模块,我们还得从FreeSWITCH的架构说起。我们先用一两天的间说一下FreeSWITCH的整体架构以及模块列表,然后,就可以式一一介绍所有模块了。当然,在讲的期间大家有什么问题话,也可以向我提问,我会有选择性的回答或“插播”一下。 FreeSWITCH的整体架构我们已经在最前面看到了,更详细一点的,我们看下图。
领取专属 10元无门槛券
手把手带您无忧上云