欢迎使用FreeSWITCH。本文最早写于2009年,最后更新时间是2022年6月4日。
很抱歉昨天没有给大家发消息。昨天在写这篇文章的时候,我的Mac的Spotlite突然又在后台建立索引,显示只剩下4分钟,但是一个4分钟过去了,两个4分钟过去了……20个4分钟过去的时候它还没有完,而且,由于我中途切换了几次窗口导致系统彻底失去响应,只好睡觉去了。问题是我睡醒了以后,它还没醒,就只好暴力重启了。Mac平时工作的挺好的,就这一点有点烦人。我一般不用Spotlite,因此回头想个办法把看能否把该功能禁了。
SIP攻击很常见,特别是各大云服务器,基本上开了个公网IP绑定到实例机器就会被外国IP一遍怼。防范也容易,就是把外国IP禁掉。 实现:iptables+ipset,只允许中国IP访问本机,也就实现了封禁国外IP的效果。 优点:匹配迅速,免去iptables单链匹配。
很多初学FreeSWITCH的同学经常会问一个问题,我该使用哪个操作系统?FreeSWITCH支持Linux、Mac、Windows平台,Wiki页面上也有相关的说明。但随着时间的流逝,总会有一些文档来不及更新,因此,在安装时就总会遇到这样那样的问题。 FreeSWITCH的核心开发人员都使用Debian,但国内好像用CentOS的比较多,再加上各种版本差异,因此,这个问题其实没有一个最好的答案。我们一般会推荐Debian 10,但大多数人其实不听我们的推荐。 不过,Docker的出现在一定情况下解决了这个问题。因此,我们做了一个xswitch-free Docker解决方案,献给大家。希望大家能快速上手。
XSwitch默认有两个SIP端口的监听,一个是default的带鉴权,一个public的不带鉴权。通常带鉴权的端口会直接暴露在公网,让用户可以通过公网直接注册。而不带鉴权的端口则需要通过服务器的安全策略或ACL等规则,遵循白名单原则放行访问。因此需要防止SIP暴力攻击的也主要是defalut所配置的sip端口,这里要配合Fail2ban去拦截IP,需要先对default的profile增加一个配置,让其能将鉴权异常的IP打印的freeswitch.log日志文件内。
接到福州的网友求助,华为服务器,跳电后Proxmox VE里面所有的虚拟机都起不来了。
FHS的全称是Filesystem Hierarchy Standard,即文件系统层次结构标准。
freeswitch是啥就不多说了,可以简单理解为一个功能强大的纯软件实现的电话交换机(俗称:软交换)。官网地址:https://freeswitch.com/,它可以运行于windows/mac/linux,完全跨平台,而且开源免费。下面介绍mac环境的安装及遇到的坑。
在上一篇文章《FreeSwitch Linux(CentOS 6.5) 安装教程》中介绍了Linux(CentOS 6.5)版的安装,这里主要讲一下windows下的安装。
在QQ群里老是看到有的朋友问到不同的模块都是干什么的。因此,我打算从今天起,把所有的模块都大体讲一遍。如果有时间我就多写点例子,时间少的话就写少点。 当然,说到模块,我们还得从FreeSWITCH的架构说起。我们先用一两天的间说一下FreeSWITCH的整体架构以及模块列表,然后,就可以式一一介绍所有模块了。当然,在讲的期间大家有什么问题话,也可以向我提问,我会有选择性的回答或“插播”一下。 FreeSWITCH的整体架构我们已经在最前面看到了,更详细一点的,我们看下图。
昨天在微信公共账号上接了一些粉丝,并发了一篇图文消息。今天盘点一下,送达人数59,图文页阅读人数12,共收到消息回复3条。看来,我的粉丝还不够活跃啊。
最近由于工作需求要搭建freeswitch,整个过程比较纠结,遂总结于此留作备忘。
静态链接还是动态链接?在这一点上,FreeSWITCH是怎么做的?接下来我想跟大家讨论一下这个问题。
之前写过一篇《阿里云 opensips nat内网穿透》,当时是为了解决对讲机视频对讲的问题。但是之前的方案存在一个问题,那就是虽然服务器能够正常提供服务。但是在接通之后如果设备不在同一个局域网内就会导致有音频但是没有视频信息。这个问题困扰了很久,直到现在算是能够解决这个问题。出现上面这个问题的根本原因在于设备的网络层次关系太过复杂,视频信息没有办法透传。我不是语音视频方面的专家,集中nat结构我也不在叙述了,感兴趣的访问这个链接:https://www.cnblogs.com/zhumengke/articles/11204924.html
上一篇学习了如何安装freeswitch,接下来我们利用2个voip软件来体验如何互打电话(注:仍然是mac环境,windows用户可参考mac上的做法,原理相通)
我们所讲的是最新版的FreeSWITCH的功能,最新版还没有发布,如果你想实验,需要用Git master版本。注意,Git mater不是一个版本,你要天天更新那才叫Git master。为了避免各种编译问题,最好使用Debian 8。
FreeSWITCH对AMR和AMR-WB两种编码格式默认为passthough状态,若想对AMR和AMR-WB进行编解码,需对mod_amr和mod_amrwb两个模块重新编译。
基于Flash的实时多媒体通信是基于Adobe的RTMP协议进行的。FreeSWITCH中通过“mod_rtmp”实现了一个基于RTMP协议的Endpoint,可以支持用Flash实现的软电话。虽然随着WebTC的出现,Flash前景不再被看好,但是在一定范围内它还将顽强的存在。而且,作为有别于SIP模块(“mod_sofia”)的另外一个Endpoint,也很有参考和借鉴意义。
这是资源站点,自行选择版本:http://files.freeswitch.org/freeswitch-releases/
FreeSWITCH从代码树中删除了mod_unimrcp(https://github.com/signalwire/freeswitch/commit/3c7e8ff989355bf518eabaeea83036585e4782b7)。
ffmpeg是比较流行的多媒体库,可以处理语音视频之类的,在开源领域内得到了大量应用,包括Android和Chrome。如果我没记错的话当年QQ也用过它,但因没有遵循开源协议开放源码而被钉在了耻辱柱上。
Portainer是一个Docker可视化管理工具,可以对方便地对Docker镜像进行管理。
我们的客户端可能是G729编码(为了节约流量),但是运营商可能要求送PCMA 711编码
nas存储一直提示可以升级7.0.于是在一个月黑风高的夜晚,手一抖,点了个升级。升级完之后就发现抑郁了,smb协议的共享在Windows下慢的1b。之前千兆网络基本是秒开,结果升级之后打开共享需要等将近10s钟。管理后台更卡,从开始加载到完全显示需要半分钟。这tm就抑郁了,于是开始搜索降级教程。
IVR(Interactive Voice Response)交互式语言应答,是呼叫中心的1个经典应用场景,FreeSwitch官方有一个利用lua实现的简单示例,大致原理是利用lua脚本+TTS实现,记录一下:(环境:FreeSwitch 1.10.11 + Windows 10)
这几天由于来回打飞机参加公司年会,来去匆匆,因此没顾上写东西。不过,在后台倒是收到不少消息。有关心的有问候的有祝福的,总之,在此一起谢谢了。
vosk是一个开源语音识别工具,可识别中文,之前介绍过python使用vosk进行中文语音识别,今天记录下FreeSWITCH对接vosk实现实时语音识别。 vosk离线语音识别可参考我之前写的文章:
前几天,儿子由于顽皮以及我的疏忽碰破了头,去医院缝了3针,所以,这两天心神有点不宁,如果写得不好,抱歉了。 好在我们家附近有一家新开的医院,环境看起来都很新,人也不多,服务也不错。包扎好了就没事了,大家也不用担心。只是这几天我得在家里陪着他。 在医院时,看到医院到处都是易拉宝,墙上也贴着宣传牌。不过,上面的英语都翻译的很搞笑,当时没顾得拍照,但记得有一项“亲民医院”之类的词翻译成了kiss。当然,见怪不怪,这种神翻译随处可见,网友也有诸多吐嘈。相信大部分都是用机器翻译的,甚至有的还有不伦不类的“Service not available”。 不明白,为什么这些制作标牌的广告公司这么没修养(没文化有情可原,你告诉人家啊)。当然,出现这些问题主要的原因也不能太怪广告公司,还是在于花钱做这些广告牌子的人。即使自己不认识英语,找个大学生帮忙看看花不了几个钱吧?要不,就直接回归拼音吧,我记得小时间的标志牌都是中文和拼音并排的,如“新华书店”上面就挂着“XIN HUA SHU DIAN”。 好了,不扯这些了,今天说说mod_portaudio。
Debian 9发布有一段时间了,FreeSWITCH最新的代码也做了适配,只是还没有发布的包。
本文提供一个OpenSIPS的一键安装包,OpenSIPs 可以作为FreeSwitch 的前端代理,实现多个FreeSwitch 负载均衡处理呼叫流量。
这里列出来 安装libyuv libvpx opus mod_av 等模块的代码 方便大家使用
dialplan/default/0001_vmain.xml中,定义了VoiceMail的检查方法。当呼叫vmain或*98时,就可以进行检查。
SRS是一个简单、高效的优秀的开源实时音视频服务器,支持 RTMP/WebRTC/HLS/HTTP-FLV/SRT/MPEG-DASH/GB28181、Linux/Windows/macOS、X86_64/ARMv7/AARCH64/M1/RISCV/LOONGARCH/MIPS 等协议和技术。
PCM(Pulse Code Modulation,脉冲编码调制)音频数据是未经压缩的音频采样数据,它是由模拟信号经过采样、量化、编码转换成的标准数字音频数据。
大家好,我是杜金房,此次分享和双向通讯服务器FreeSWITCH以及WebRTC有关。首先我会为大家简单介绍FreeSWITCH,鉴于FreeSWITCH主要用于通信领域,我也会介绍WebRTC并阐述FreeSWITCH与WebRTC的关系,同时结合FreeSWITCH的其他功能和使用场景与其功能以及所使用的多媒体库,进一步探索AI技术加持下FreeSWITCH的未来发展。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格局。它基于ECMAScript的一个子集。JSON选用完全独立于言语的文本格局,但是也使用了类似于C言语宗族的习气(包含C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使json调试成为抱负的数据交换言语。易于人阅览和编写,同时也易于机器解析和生成(一般用于提高网络传输速率)。
今天,本来想多写点东西的,可是陪孩子玩的多了,就没有时间了。前两天有朋友问到FreeSWITCH有取代或超越Asterisk的历史地位的可能吗?简单回答一下:我认为,Asterisk的历史地位在于它是开源的VoIP软件的先驱,它的历史地位是谁都不可能替代的。但是,如果说到应用及规模,我倒认为FreeSWITCH的前景是很好的。下面是我以前翻译的一篇文章,与大家分享一下。该文章原载于:http://www.freeswitch.org.cn/2010/01/23/freeswitch-yu-asterisk.html ,也可以点击左下角的「查看原文」查看。
今天,有网友问到一个问题——使用什么工具检测录音文件中的DTMF信息。其实FreeSWITCH本身就具备检测DTMF的功能,简单配置一下,写几个脚本就可以了。
今天,我们来看dialplan/default/0000_local_extensioins.xml。
很多集团化的公司由于在不同城市甚至不同国家有很多分站点,因此远程会议和办公对这些企业来说是十分必要的,EasyRTC恰好适应了这些需求,成为远程会议和通话的不二之选。
sipp是一款VoIP测试工具,日常开发过程中会使用到该软件,但其自身携带的pcap文件夹里面的rtp数据包太小,rtp长时间测试的场景会出现媒体异常的情况,需要制作长时间pcap文件以满足测试,这里记录下使用sipp作为uac和uas对接freeswitch重放长时间rtp数据测试的过程。
前几天,Anthony新推了个新的模块——mod_rtc。在提交信息里是这么说的:add new stub module mod_rtc dummy signaling-free media engine endpoint 。意思是,该模块是一个空的Endpoint模块,而且,该模块是跟信令无关的。从模块的名字来看,很可能是跟WebRTC相关的。
在一些特殊应用场景中,可能希望把摄像头或者其他推流视频加入到FreeSWITCH中,我这里提供2个示例供大家借鉴
题外话:昨天是2020年元宵节,正值"新型肺炎"第二阶段防治关键时期,返沪后按规定自觉在家隔离14天,不出去给社会添乱,真心希望这次疫情快点过去。
IVR(Interactive Voice Response)即交互式语音应答,也就是我们说的电话语音菜单,可以使用预先录制的语音或者TTS进行自动应答,提供菜单导航,主要用于呼叫中心系统。我们主要介绍FreeSWITCH提供的IVR功能。
sipp是一个针对SIP协议进行测试的免费开源工具,可运行于windows/mac/linux,官方地址:http://sipp.sourceforge.net/。
Docker类似于虚拟机,但相比虚拟机,它启动更快(直接进程启动),占用资源少(只占所需资源),体积小(只需要用到的组件即可),可以说是轻量级虚拟机。Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器,程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样,Docker是Linux容器的一种封装。
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中文社区,
领取专属 10元无门槛券
手把手带您无忧上云