freeswitch是啥就不多說了,可以簡單理解為一個功能強大的純軟件實現的電話交換機(俗稱:軟交換)。官網地址:https://freeswitch.com/,它可以運行於windows/mac/linux,完全跨平台,而且開源免費。下面介紹mac環境的安裝及遇到的坑。
前提:mac機上必須有brew,如果brew有問題(或者是很早的版本),建議參考上篇mac上homebrew重裝手記.
freeswitch官方給出了二種安裝方式:“從git下載源碼一步步編譯安裝”及“下載mac Installer文件安裝”。顯然用安裝文件一路next的方式更友好些,遇到的坑相對也更少。
一、下載macOS FreeSWITCH™ Installer
從freeswitch官網下載即可(目前最新的版本是1.10.2-release),下載后是一個zip包,解壓開,會看到這貨
二、安裝
雙擊macOS FreeSWITCH Installer:
建議先安裝Update prerequisites and FreeSWITCH,這一步會把一些依賴的東西,先update成最新的,避免后面安裝時出錯。
這一步的過程截圖就不貼了,大致就是利用brew更新一堆東東。(注:強烈建議,先把brew的源換成國內鏡像,否則那網速,等你睡醒了起床,都不一定能完成~_~)
這個完成后,再選擇第一項Install FreeSWITCH,這里會遇到第1個坑:
到apple官網查了一下,大意是說安裝程序及terminal終端沒有獲得系統控制權。
進到“系統偏好”設置,找到“安全及隱私”,把macOS FreeSWITCH Installer及終端前面的勾都選中(注:我機器上的終端換成了iTerm,如果大家用的其它terminal,這里自行調整)。然后這里可能會遇到第2個坑,剛開始我按這個設置后,重新打開Installer安裝程序,還是沒效果,機器重啟,還是一樣!然后無意把mac的系統默認語言,從中文換成了英文,然后再重啟。
再次運行安裝程序,居然通過了。然后就是漫長的等待,特別是最后下載各路音頻文件,耗時很長,終於一切安裝完成了,以為大功告成,然后興沖沖的運行/usr/local/freeswitch/bin/freeswitch,卻發現根本沒這個文件!也就是說程序根本沒安裝成功!
郁悶的同時,無意瞄了一眼桌面,發現一堆“FreeSWITCH Intall Logs ...” 的目錄
點進去看了下,原來是每個步驟的詳細日志,這一點到蠻值得我們學習的
打開 07 FreeSWITCH make install這個文件,看名字就能猜出這是編譯安裝的,多半這里有問題,果然:
-------------------------------
? freeswitch make install
/Library/Developer/CommandLineTools/usr/bin/make install-recursive
CC src/libfreeswitch_la-switch_core_cert.lo
src/switch_core_cert.c:39:20: error: unused function 'switch_ssl_ssl_lock_callback' [-Werror,-Wunused-function]
static inline void switch_ssl_ssl_lock_callback(int mode, int type, char *file, int line)
^
src/switch_core_cert.c:49:29: error: unused function 'switch_ssl_ssl_thread_id' [-Werror,-Wunused-function]
static inline unsigned long switch_ssl_ssl_thread_id(void)
^
2 errors generated.
make[1]: *** [src/libfreeswitch_la-switch_core_cert.lo] Error 1
make: *** [install] Error 2
? freeswitch
-------------------------------
意思是說,src/switch_core_cert.c這個源文件里,有2個沒用到的函數switch_ssl_ssl_lock_callback、switch_ssl_ssl_thread_id。上網查了下,其它人也遇到這個問題了,見https://github.com/signalwire/freeswitch/issues/176。
隨便找個編輯工具,比如vscode或vi,打開/usr/local/src/freeswitch/src/switch_core_cert.c 這個文件
把這倆搗蛋函數注釋掉,然后在終端下,cd /usr/local/src/freeswitch,再執行make install 就能通過了,最后在生成unittest單元測試時,可能會報錯,先不用管。
三、運行
終端下運行下面的命令
cd /usr/local/freeswitch/bin
./freeswitch
如果能看到上面的輸出,恭喜你,表示freeswitch啟動成功!另外,freeswitch啟動后,會占用本機的5060、8021這二個端口,可以另開一個terminal窗口,參考下圖的命令檢查一下:
其中5060是sip服務器的端口,各種voip客戶端軟件通過這個端口與freeswitch連接。而8021端口是供其它應用連接,用來監聽各種事件的(后面講esl inbound開發時,會再詳細說這塊) 。
最后折騰完了,如果想關閉,直接在freeswitch所在的terminal終端中,輸入shutdown即可。