FreeSWITCH是一个开源的电话软交换平台,支持实时音视频通信及会议,支持SIP及WebRTC等多种通信协议。其主要开发语言是C/C++。
1 安装虚拟机并配置ubuntu操作系统
1.1 需要事先下载VMware workstation Pro软件和ubuntu的iso光盘映像文件。VMware可以在一台计算机上同时运行多个操作系统,用来存储所有虚拟机的计算机称为宿主机,相应地在VMware上安装的ubuntu则称为虚拟机。
1.2 VMware提供五种网络连接方式,简介其中两种模式。桥接模式:相当于虚拟机的网卡和宿主机的物理网卡均连接到虚拟机软件所提供的 VMnet0 虚拟交换机上,因此虚拟机和宿主机是平等的,相当于一个网络中的两台计算机。
这种设置既可以保证虚拟机和宿主机通信,也可以和局域网内的其他主机通信,还可以连接 Internet,是限制最少的连接方式,推荐新手使用。NAT 模式:相当于虚拟机的网卡和宿主机的虚拟网卡 VMnet8 连接到虚拟机软件所提供的
VMnet8 虚拟交换机上,因此本机是通过 VMnet8 虚拟网卡通信的。在这种网络结构中,VMware 为虚拟机提供了一个虚拟的 NAT 服务器和一个虚拟的 DHCP 服务器,虚拟机利用这两个服务器可以连接到 Intemet。所以,在正常情况下,
虚拟机系统只要设定自动获取 IP 地址,就能既和宿主机通信,又能连接到 Internet了。但是这种设置不能连接局域网内的其他主机。
2,关于虚拟机的分区扩容
2.1 在关闭客户机后可以查看到硬盘大小和网络适配器模式,通过点击硬盘可以弹出扩展硬盘容量的对话框,输入最大磁盘大小后点击扩展。这里的扩展操作仅增大虚拟磁盘的大小,磁盘扩展后,
需要从客户机操作系统内部对磁盘重新进行分区和扩展文件系统。
2.2扩容前需要在虚拟机中安装一个软件 "Gparted",通过命令sudo apt install gparted进行安装,打开gparted就可以看到未分配的分区,现在要做的就是将未分配的空间分配到原有磁盘大小的主分区/dev/sda1中。
单击右键主分区/dev/sda1区域,点击更改大小在弹出的对话框中输入新大小即可。
3,编译安装FreeSwitch
3.1 下载源代码
下载freeswitch1.10版本,github.com/signalwire/…
下载libks, github.com/signalwire/…
下载sofia-sip github.com/freeswitch/…
下载spandsp github.com/freeswitch/…
下载signalwire-c github.com/signalwire/…
3.2 安装freeswitch所需要的依赖:
sudo apt install -y
build-essential cmake automake autoconf libtool libtool-bin pkg-config
libssl-dev zlib1g-dev libdb-dev unixodbc-dev libncurses5-dev libexpat1-dev libgdbm-dev bison erlang-dev libtpl-dev libtiff5-dev uuid-dev
libpcre3-dev libedit-dev libsqlite3-dev libcurl4-openssl-dev nasm
libogg-dev libspeex-dev libspeexdsp-dev libldns-dev python3-dev
libavformat-dev libswscale-dev liblua5.2-dev libopus-dev
libpq-dev libshout3-dev libmpg123-dev libmp3lame-dev
libsndfile1-dev libflac-dev libogg-dev libvorbis-dev
3.3 进行各个模块安装
安装libks
bash
体验AI代码助手
代码解读
复制代码
cd libks
cmake . -DCMAKE_INSTALL_PREFIX=/usr -DWITH_LIBBACKTRACE=1
sudo make install
cd ..
安装sofia-sip
bash
体验AI代码助手
代码解读
复制代码
cd sofia-sip
./bootstrap.sh
./configure CFLAGS="-g -ggdb" --with-pic --with-glib=no --without-doxygen --disable-stun --prefix=/usr
make -j`nproc --all`
sudo make install
cd ..
安装spandsp
bash
体验AI代码助手
代码解读
复制代码
cd spandsp
./bootstrap.sh
./configure CFLAGS="-g -ggdb" --with-pic --prefix=/usr
make -j`nproc --all`
sudo make install
cd ..
安装signalwire-c
bash
体验AI代码助手
代码解读
复制代码
cd signalwire-c
PKG_CONFIG_PATH=/usr/lib/pkgconfig cmake . -DCMAKE_INSTALL_PREFIX=/usr
sudo make install
cd ..
编译安装FreeSWITCH
bash
体验AI代码助手
代码解读
复制代码
cd freeswitch
./bootstrap.sh -j
./configure
make -j`nproc`
sudo make install
安装英文声音资源(可选)
go
体验AI代码助手
代码解读
复制代码
make cd-sounds-install
make cd-moh-install
make uhd-sounds-install
make uhd-moh-install
make hd-sounds-install
make hd-moh-install
make sounds-install
make moh-install
3.4 在安装过程中遇到的错误
(1) make[4]: Entering directory '/home/barry/work/code/freeswitch/src/mod/applications/mod_av' CCLD mod_av.la /usr/bin/ld: /usr/local/lib/libavcodec.a(h264_weight_10bit.o):
warning: relocation against ff_pw_1' in read-only section .text' /usr/bin/ld: /usr/local/lib/libavcodec.a(vc1dsp_mmx.o): relocation R_X86_64_PC32 against symbol `ff_pw_9' can not be used when making a shared object; recompile
with -fPIC /usr/bin/ld: final link failed: bad value collect2: error: ld returned 1 exit status make[4]: *** [Makefile:955: mod_av.la] Error 1
对于这个问题,需要安装较低版本的FFMPEG,比如5.1版本,下载之后,在进行配置时执行如下命令:./configure --extra-ldflags="-Wl,-Bsymbolic" --enable-shared,之后在进行make && make install
(2) mod_spandsp_dsp.c:159:17: error: 'V18_MODE_5BIT_4545' undeclared (first use in this function) 159 | int r = V18_MODE_5BIT_4545; | ^~~~~~~~~~~~~~~~~~ mod_spandsp_dsp.c:159:17: note: each undeclared identifier is
reported only once
for each function it appears in mod_spandsp_dsp.c:165:29: error: 'V18_MODE_5BIT_50' undeclared (first use in this function) 165 | r = V18_MODE_5BIT_50; | ^~~~~~~~~~~~~~~~ mod_spandsp_dsp.c: In function
'spandsp_tdd_send_session':
mod_spandsp_dsp.c:216:21: error: too few arguments to function 'v18_init' 216 | tdd_state = v18_init(NULL, TRUE, get_v18_mode(session), V18_AUTOMODING_GLOBAL, put_text_msg, NULL); | ^~~~~~~~
In file included from /usr/local/include/spandsp.h:114,
from mod_spandsp.h:50, from mod_spandsp_dsp.c:36: /usr/local/include/spandsp/v18.h:138:29: note: declared here 138 | SPAN_DECLARE(v18_state_t *) v18_init(v18_state_t *s,
对于这类问题,是由于spandsp的问题,spandsp和freeswitch是分开的分支,存在不同步的情况,可以使用如下提交的spandsp代码: git checkout -b finecode 0d2e6ac65e0e8f53d652665a743015a88bf048d4 之后重新编译安装。
如果还是出现V18_MODE_5BIT_4545和v18_init,
可以考虑如下方法看是否可行,进入mod_spandsp_dsp.c文件中 int r = V18_MODE_5BIT_4545; 修改为int r = V18_MODE_WEITBRECHT_5BIT_4545 tdd_state = v18_init(NULL, TRUE, get_v18_mode(session),
V18_AUTOMODING_GLOBAL, put_text_msg, NULL);
修改为tdd_state = v18_init(NULL, TRUE, get_v18_mode(session), V18_AUTOMODING_GLOBAL, put_text_msg, NULL, NULL, NULL);
3.5 启动freeswitch服务
执行以上步骤后,FreeSWITCH已经被安装到/usr/local/freeswitch目录下了,通过如下命令启动:
cd /usr/local/freeswitch/bin
./freeswitch
等待一段时间后,FreeSWITCH服务就已经成功启动了,在当前控制台输入命令sofia status可以看到一点配置信息。 执行...命令退出控制台后,对应的FreeSWITCH服务也就退出了。如果想在后台启动服务,
在执行bin/freeswitch时后面加上-nc命令参数。
为支持视频通话,需要根据实际情况参考下列的设置。
(1) 修改conf/vars.xml文件中有个sip_ip的设置,将external_sip_ip修改为$${local_ip_v4}
(2) 修改conf/sip_profiles下的internal.xml文件,在这个文件中添加param参数监听,即name为listen-ip和listen-port,其value值分别为local_ip_v4和5060
(3)修改conf/autoload_configs/下的modules.conf.xml文件,将module值为mod_h226x的注释去掉,用于支持视频通话。
(4)修改conf/下的vars.xml文件,将global_codec_prefs值和outbound_codec_prefs值都添加上H264.
3.6 Freeswitch常见的命令
sofia status profile internal reg可以查看有多少个客户端接入服务器。
conference test bgdial user/1004,命令表示,发起1个名为test的会话,同时拨打1004用户,如果该用户接听了,就相当于加入会议。
conference test list 表示查看会议test的用户列表
conference test kick 9 将member-id为9的用户(即:1004)从会议test中踢出 conference test mute 10 表示在会议test中,对member-id为10的用户静音。如果把mute换成tmute即为解除静音。
conference test deaf 10 表示让member-id为10的用户,听不到test会议的内容,如果deaf换成undeaf即为恢复
conference test hup all 表示结束会议test,hup即为hangup的缩写.