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 使用其它開源免費的函式庫來提供必要的功能。典型的有：

- 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轉碼卡)
- 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

## 基本資料

- 語言：multi-lingual
- 平台：Cross-platform
- 作者：Anthony Minessale
- 開發者：Many contributors
- 作業系統：Unix-like、Windows、Sun Solaris、Mac OS X
- 類型：, Softswitch
- 許可協議：Mozilla Public License (MPL)
- 網站： FreeSWITCH