Freeswitch入门与网络架构

一. 简介与背景

在当前的互联网时代,想必大家对于网络电话或者通过网络进行语音、视频的场景再熟悉不过了。基于IP的语音传输(英语:Voice over Internet Protocol,缩写为VoIP)是一种语音通话技术,经由网际协议(IP)来达成语音通话与多媒体会议,也就是经由互联网来进行通信。我们通俗称这种拨打电话的方式叫”网络电话”。

VoIP走的是我们的TCP/IP网络,硬件设备如麦克风通过系统驱动将我们的声音转换为数字信号,简单理解,声音可以由一串0和1的数据构成,通过TCP/IP网络进行传输到对端,对端再将数字信号通过声卡还原为我们听到的声音,从而达到双方通信的目的。

微信语音通话,其实本身就是VoIP的一种应用方式。我们日常语音聊天都可以通过微信客户端进行交流,很方便。我们选择使用微信语音通话最大的一个好处就是 省钱! 省钱! 省钱! ,尽管使用过程中需要连接WIFI、使用移动蜂窝网络也会消耗成本,但是相比于双方拨打传统电话的场景要划算得太多。所以VoIP的一个优点就是: 省成本。 但是缺点,大家也会发现,要么双方都安装上相同的客户端,例如微信客户端,并且双方是好友,又例如Apple的Facetime通话,双方都是Apple手机并且知晓对方的AppleId,这样才能进行通话。

我们传统电话的网络叫PSTN, (PSTN ( Public Switched Telephone Network )定义:公共交换电话网络,一种常用旧式电话系统。即我们日常生活中常用的电话网。工作原理 公共交换电话网络是一种全球语音通信电路交换网络,包括商业的和政府拥有的。). PSTN网络和TCP/IP网络两者是完全不同的异构网络, 使用的协议、含义、介质都不尽相同。

此时我们在思考一个问题, VoIP使用的TCP/IP网络可以和PSTN公共电话网可以做对接吗? 这样的话我们就可以通过VoIP经过TCP/IP网络也可以和PSTN公共电话网的手机/固话进行通讯了。答案是肯定的。 这种东西我们暂且称它为”语音网关”。 “语音网关”大家也能想到,这个东西肯定是运营商ISP(电信/移动/联通)才能做的, 因为PSTN网络只有运营商能够触及得到,并且本身网络这块也逃离不了运营商的管理,所以”语音网关”对于普通企业来说,只能依赖运营商提供,自己是开发不了的。

既然”语音网关”我们个人/企业无法触及,只能跟运营商合作。拿到”语音网关”信息一般体现为ip+端口的形式。如果要和运营商的进行对接,你需要提供公司的ip+端口给运营商加入”白名单”,之后才能进行对接。

“语音网关”和普通开发者/企业无关, 那么如果我作为企业的开发者,那现在缺的是,有没有这么一种软件,最好是开源的,可以接受用户通过TCP/IP网络传递的语音信息,再将语音信息递给”语音网关”, 这样就能实现VoIP和PSTN建立通话, 然后,我们只需要做应用层的业务开发即可。

答案是肯定的。 IP PBX是一种基于IP的公司电话系统,还有类似IPPBX或者IP-PBX书写方式.

IPPBX市面上常见的开源软件有如Freeswitch、Asterisk、FreePBX等.

二. Freeswitch介绍

开源的IPPBX有那么多,除了Freeswitch,还有如Asterisk、FreePBX,为什么我们采用了Freeswitch呢? 其实,这个也不是拍脑袋决定的。 因为我们这个Freeswitch项目是”从零到一”的一个过程, 大家发现其实国内,包括国外对于这种开源软件的资料都少之又少。 毕竟这个赛道相对冷门一点,不像大家学个Nginx、PHP、Java这种相对比较广泛的技术一堆资料和教程。所以本篇博客记录下我们的实践过程,供大家参考。

我们选择Freeswitch的理由:

1.我们业务对接的第三方公司,通过sip抓包拿到对方的sip响应头信息得知对方使用的是Freeswitch。

2.咨询过几个合作商的大拿,他们公司项目也是基于Freeswitch进行二次开发然后进行商业化。

3.自身调研过这些开源项目的github,文档、资料,Freeswitch相关稳定成熟,并且对于二次开发相对友好。

三. 网络架构图

我们先粗略看下一个用户通过VoIP的客户端,是怎么和PSTN传统手机电话建立通讯的。

用户通过VoIP客户端,通过sip协议与Freeswitch进行交互(验证账号、注册), 通过后,将主叫显示号码、被叫号码等信息传递给”语音网关”, “语音网关”将TCP/IP网络和PSTN网络进行连接创建了这次通话,此时数据进入PSTN网络之后,找到被叫端手机号进行呼叫,被叫端响铃接听电话后,主叫和被叫就可以建立语音通话了。

从TCP/IP网络到PSTN的过程我们叫这个动作成为”落地”, 语音网关也成为”落地网关”或者成为”线路”。

从上述的网络架构图,其实大家也能发现一些商业模式的存在。 首先,你可以和运营商合作做中间商,卖”线路”赚差价。一般运营商不会跟个人/体量较小的公司进行合作线路售卖的,所以如果你作为中间商的话,先和运营商合作买到”线路”,再将”线路”进行产品包装,卖给需要”线路”的这些小公司或者没有这种线路能力的公司赚差价。阿里云的语音通信服务、华为通话服务以及一堆”线路”提供商的商业模式就是这样,从运营商拿到低价的通话分钟数,再高价卖出。 如果中间商你做不了,那么你做SAAS产品,例如电话销售、呼叫中心等等,可以自己基于Freeswitch开发自己的系统,通过VoIP的方式减少了自己的呼叫成本,也是一种商业模式,等等诸如此类.

理解本章对于后续有很大的帮助,因为这些东西是我们自己从零到一的思考,并没有任何人指导和辅助。 后续的整体网络逻辑都是如上图,只有理解上面的网络架构图才能更好地排查问题。