FreeSWITCH

FreeSWITCH是一个自由开源的软交换。它采用Mozilla Public License（MPL）授权协议，MPL是一个开源的软件协议。它的核心库libfreeswitch可以嵌入其它系统或产品中，也可以作为一个单独的应用存在。

 历史 
FreeSWITCH项目最初于2006年1月在O'Reilly Media's ETEL会议上发布。  2007年6月，FreeSWITCH 被Truphone 采用。2007年8月, Gaboogie 宣布使用FreeSWITCH作为电话会议平台。

FreeSWITCH的第一个官方的1.0.0版（Phoenix）发布于2008年5月26日。2008年7月24日发布了一个小的更新版。 1.2.1版发布于2012年8月. Anthony Minessale announced在ClueCon 2012上宣布了1.2.0版的发布.2024年8月2号发表1.10.12版本,同时从本版本开始，停止对centos全系列及Debian 10停止支持。

 设计 
据其主要开发者Anthony Minessale所说， FreeSWITCH 致力于做一个 软交换，它建立于一个坚实的核心上面，由一个有限状态机驱动。  该项目的目标包括稳定，可伸缩性，以及抽象性。

为了减少复杂性及避免重复发明轮子，FreeSWITCH 使用其它开源免费的函式库来提供必要的功能。典型的有：A complete list of dependencies can be found in the dependencies page  section of the FreeSWITCH documentation.
 Apache Portable Runtime (APR and APR-Util)
 SQLite – 一个轻量级的SQL引擎
 PCRE – Perl兼容的正则表达式引擎
 Sofia-SIP – 一个开源的 SIP UA 库
 libspeex – Speex DSP 库
 mod_spandsp 支持 T.38 传真
 libSRTP – Secure Real-time Transport ProtocolSRTP的一个开源实现

编译FreeSWITCH时并不是所有这些库都是必要的，只是在某些模块需要用到它们，如Codec模块等。FreeSWITCH是一个模块化结构的程序，模块可以扩展核心的功能，而内部的抽象层则可以避免模块间的相互依赖关系。目标是避免加载一个模块时又依赖其它模块。

 特性 
FreeSWITCH包含大量的模块，如缺省的包括视频会议，使用XML-RPC 控制呼叫，Interactive voice response (IVR), TTS/ASR (语音合成和语音识别), Public switched telephone network (PSTN) 接口，可连接模拟和数字中继，VoIP 协议包括 SIP，SCCP, H.323, XMPP, GoogleTalk, t.38 等等。

使用FreeSWITCH库开发程序可以使用 C/C++, Python， Perl， Lua，JavaScript， Java 以及 Microsoft .NET 通过Microsoft 的 CLR 或Mono。不管是何种语言，FreeSWITCH都能提供对外的呼叫控制接口以及IVR控制功能，以便于开发人员使用。

呼叫控制接口可以使用Event Socket，它是一个 网络套接字 连接软件和协议。基本上任何语言都可以通过Event Socket与它通信，进而控制呼叫流程。FreeSWITCH也自带了一个 Event Socket 库 (ESL) 以及 "ESL-wrappers"，支持 Erlang, JavaScript, Lua, Perl, PHP, Python, and Ruby.

 编解码支持 
FreeSWITCH支持很多的语音编解码:

 PCMU – G.711 µ-law
 PCMA – G.711 A-law
 G.722
 G.722.1
 G.722.1c
 G.726
 G.726 with AAL2 packing
 G.729 (默认透传模式，转码可以在FreeSWITCH官网购买许可，每通道10美金，或使用Sangoma转码卡)https://billing.freeswitch.org/cart.php?a=confproduct&i=1
 GSM
 CELT
 iLBC
 DVI4 (IMA ADPCM)
 BroadVoice
 SILK
 Speex
 CODEC2
 Siren
 LPC-10
 G.723.1 (默认透传模式，转码可以使用Sangoma转码卡)
 AMR (默认透传模式，转码可以使用Sangoma转码卡-仅限AMR-NB)
 iSAC
 Opus

FreeSWITCH支持的视频编码（1.7版支持视频转码）:
 H261
 H263
 H263+ (H263-1998)
 H263++ (H263-2000)
 H264
 VP8
 Theora
 MP4

某些编码只支持透传，这意味着FreeSWITCH对这些媒体不进行任何处理，而把原始压缩的内容直接“透传”到对方。这使得双方都有兼容的编码时可以相互通信，而这些编码可能因为专利等原因不能在FreeSWITCH内部提供。由于使用这些编码里数据无法解码，某些IVR或录音应用就受到限制。

FreeSWITCH也支持硬件编码软件卡，如Sangoma的板卡。 通过硬件实现编解码，可以节约服务器端的CPU，而且通过硬件实现的转码都已经包含正常的许可证，这也解决了上面的透传问题。

 操作系统与编译环境支持 
 AuroraUX (LLVM+Clang/gmake)
 Sun Solaris 10 UNIX (Sun Studio)
 BSD系统（包括FreeBSD 8-10，NetBSD 6，OpenBSD 5） (gmake)
 Mac OS X (make)
 Linux系统（包括Red Hat Enterprise Linux，CentOS，Debian(可以运行于树莓派)，Ubuntu等）#Debian支持的版本为11和12,CentOS从1.10.12版本开始，停止支持。
 Microsoft Windows (原生支持，有二进制安装程序)
 Pfsense

 问题 
 BRI 支持需要基于Sangoma硬件板卡

 与其它类似的电话软件比较 

FreeSWITCH 填补了简单的仅仅是路由电话的纯交换软件如 GnuGK 和 SER, 和那些主要用于 PABX 或 IVR的应用如 Asterisk 以及其衍生品之间的空白。FreeSWITCH 可以作为，如一个 PABX，一个 voicemail 系统, 一个 电话会议系统或一个 电话卡系统 – 可以使用任何语言来构建这样的产品。

 衍生产品 
FreeSWITCH 是很多商业的和开源的装在盒子里的PABX的核心组件。某些商业产品是软硬件结合的。

例如 Barracuda Networks CudaTel VOIP PBX 系列以及 Gemeinschaft_(PBX).

 参见 

 自由软件列表 – 其它相关的软件

 参考资料 

 外部链接 
 FreeSWITCH Project Home Page – FreeSWITCH官方网站
 FreeSWITCH Confluence – FreeSWITCH官方文档
 FreeSWITCH-CN中文社区 – 中文社区和文档大本营
 #freeswitch on freenode

Category:VoIP软体