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即可。