一、前言
freeswitch 各個(gè)版本路徑:https://files.freeswitch.org/freeswitch-releases/
freeswitch 依賴庫(kù)離線下載地址:https://files.freeswitch.org/downloads/libs/
- 1、先關(guān)閉防火墻,以免造成不可抗拒的問(wèn)題
//臨時(shí)關(guān)閉
systemctl stop firewalld
//禁止開(kāi)機(jī)啟動(dòng)
systemctl disable firewalld
二、安裝必要依賴
- 1、安裝基礎(chǔ)依賴
yum install -y https://files.freeswitch.org/repo/yum/centos-release/freeswitch-release-repo-0-1.noarch.rpm epel-release
yum install -y git alsa-lib-devel autoconf automake bison broadvoice-devel bzip2 curl-devel libdb4-devel e2fsprogs-devel erlang flite-devel g722_1-devel gcc-c++ gdbm-devel gnutls-devel ilbc2-devel ldns-devel libcodec2-devel libcurl-devel libedit-devel libidn-devel libjpeg-devel libmemcached-devel libogg-devel libsilk-devel libsndfile-devel libtheora-devel libtiff-devel libtool libuuid-devel libvorbis-devel libxml2-devel lua-devel lzo-devel mongo-c-driver-devel ncurses-devel net-snmp-devel openssl-devel opus-devel pcre-devel perl perl-ExtUtils-Embed pkgconfig portaudio-devel postgresql-devel python-devel python-devel soundtouch-devel speex-devel sqlite-devel unbound-devel unixODBC-devel wget which yasm zlib-devel libshout-devel libmpg123-devel lame-devel
- 2、安裝mod_av支持的lib
mod_av 依賴libav, libav需要 x264 lib才能支持h264
# download and install libx264
wget -c http://files.freeswitch.org/downloads/libs/libx264.tar.bz2
tar -jxvf libx264.tar.bz2
./configure --enable-static --enable-shared --prefix=/usr
make
make install
cp /usr/lib/pkgconfig/x264.pc /usr/lib64/pkgconfig/
cp /usr/lib/libx264.so /usr/lib64/
cp /usr/lib/libx264.a /usr/lib64/
# download and install libav
wget -c http://files.freeswitch.org/downloads/libs/libav-12.tar.bz2
tar -jxvf libav-12.tar.bz2
./configure --enable-pic --enable-shared --enable-libx264 --enable-gpl --extra-libs="-ldl" --extra-cflags=-I/usr/include --extra-ldflags=-L/usr/lib64
make # make CXXFLAGS="-fPIC"
make install
cp /usr/local/lib/pkgconfig/libavcodec.pc /usr/local/lib/pkgconfig/libavdevice.pc /usr/local/lib/pkgconfig/libavfilter.pc /usr/local/lib/pkgconfig/libavformat.pc /usr/local/lib/pkgconfig/libavresample.pc /usr/local/lib/pkgconfig/libavutil.pc /usr/local/lib/pkgconfig/libswscale.pc /usr/lib64/pkgconfig/
# 執(zhí)行刷新,以讓FreeSWITCH運(yùn)行時(shí)可以找到庫(kù)
ldconfig
- 3、安裝 libpng
git clone https://freeswitch.org/stash/scm/sd/libpng.git
cd libpng
./configure
make
make install
cp /usr/local/lib/pkgconfig/libpng* /usr/lib64/pkgconfig/
- 4、安裝cmake
#卸載yum安裝的版本,若無(wú)安裝則忽略
yum remove cmake
wget https://cmake.org/files/v3.14/cmake-3.14.0.tar.gz
tar -zxvf cmake-3.14.0.tar.gz
cd cmake-3.14.0
./configure
make
make install
- 5、安裝libks
# 先安裝libatomic依賴
yum install libatomic
git clone https://github.com/signalwire/libks.git
cd libks
cmake .
make
make install
- 6、安裝signalwire-c
git clone https://github.com/signalwire/signalwire-c.git
cd signalwire-c/
cmake .
make
make install
ln -sf /usr/local/lib64/pkgconfig/signalwire_client.pc /usr/lib64/pkgconfig/signalwire_client.pc
#若是沒(méi)有找到signalwire_client.pc,可以全局搜索,搜索到之后,替換對(duì)應(yīng)的路徑 find / -name signalwire_client.pc
- 7、安裝odbc
yum install -y unixODBC unixODBC-devel mysql-connector-odbc
安裝完成后:
編輯/etc/odbcinst.ini
# Example driver definitions
# Driver from the postgresql-odbc package
# Setup from the unixODBC package
[PostgreSQL]
Description=ODBC for PostgreSQL
Driver=/usr/lib/psqlodbcw.so
Setup=/usr/lib/libodbcpsqlS.so
Driver64=/usr/lib64/psqlodbcw.so
Setup64=/usr/lib64/libodbcpsqlS.so
FileUsage=1
# Driver from the mysql-connector-odbc package
# Setup from the unixODBC package
[MySQL]
Description=ODBC for MySQL
Driver=/usr/lib64/libmyodbc5.so
Setup=/usr/lib64/libodbcmyS.so
Driver64=/usr/lib64/libmyodbc5.so
Setup64=/usr/lib64/libodbcmyS.so
FileUsage=1
編輯/etc/odbc.ini
[freeswitch]
Description=MySQL realtime database
Driver=/usr/lib64/libmyodbc5.so
SERVER=127.0.0.1
PORT=3306
DATABASE=freeswitch
OPTION =67108864
CHARSET=UTF8
USER=數(shù)據(jù)庫(kù)賬號(hào)
PASSWORD=數(shù)據(jù)庫(kù)密碼
Threading=0
輸入:isql -v freeswitch測(cè)試是否能夠連通,正常如下:

三、FreeSwitch編譯源碼安裝
- 1、安裝
wget https://files.freeswitch.org/freeswitch-releases/freeswitch-1.10.3.-release.tar.gz
tar vzxf freeswitch-1.10.3.tar.gz
cd freeswitch-1.10.3
#如果不想使用mysql管理,只需要執(zhí)行./configure即可
./configure --enable-core-odbc-support
make
make install
#安裝聲音文件
make cd-sounds-install
make cd-moh-install
#設(shè)置鏈接符號(hào),便于使用
ln -sf /usr/local/freeswitch/bin/freeswitch /usr/local/bin/
ln -sf /usr/local/freeswitch/bin/fs_cli /usr/local/bin/
- 2、部署成服務(wù)
vi /usr/lib/systemd/system/freeswitch.service
編輯以下內(nèi)容:
[Unit]
Description=freeswitch
After=syslog.target
After=network.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/home/mintcode
ExecStart=/usr/local/freeswitch/bin/freeswitch
ExecStop=/usr/local/freeswitch/bin/freeswitch -stop
Restart=always
[Install]
WantedBy=multi-user.target
- 3、配置MySQL管理Freeswitch
<!-- vi conf/autoload_configs/db.conf.xml -->
<param name="odbc-dsn" value="freeswitch:root:123456"/>
<!-- vi conf/autoload_configs/switch.conf.xml -->
<param name="core-db-dsn" value="freeswitch:root:123456" />
<param name="odbc-dsn" value="freeswitch:root:123456"/>
<!-- vi conf/autoload_configs/voicemail.conf.xml -->
<param name="odbc-dsn" value="freeswitch:root:123456"/>
<!-- vi conf/autoload_configs/callcenter.conf.xml -->
<param name="odbc-dsn" value="freeswitch:root:123456"/>
<!-- vi conf/sip_profiles/external.xml -->
<param name="odbc-dsn" value="freeswitch:root:123456"/>
<!-- vi conf/sip_profiles/internal.xml -->
<param name="odbc-dsn" value="freeswitch:root:123456"/>
<!-- vi conf/sip_profiles/internal-ipv6.xml -->
<param name="odbc-dsn" value="freeswitch:root:123456"/>
<!-- vi conf/sip_profiles/external-ipv6.xml -->
<param name="odbc-dsn" value="freeswitch:root:123456"/>
<!-- vi conf/autoload_configs/fifo.conf.xml -->
<settings>
<param name="delete-all-outbound-member-on-startup" value="false"/>
<param name="odbc-dsn" value="freeswitch:root:123456"/>
</settings>
<!-- vi conf/vars.xml -->
<X-PRE-PROCESS cmd="set" data="json_db_handle=odbc://freeswitch:root:123456"/>
- 4、開(kāi)啟錄音功能
修改撥碼計(jì)劃
打開(kāi)文件../freeswitch/conf/dialplan/default.xml
找到Local_Extension節(jié)點(diǎn)
<extension name="Local_Extension">
<condition field="destination_number" expression="^(10[01][0-8])$">
在其下,添加:
<action application="set" data="RECORD_TITLE=Recording ${destination_number} ${caller_id_number} ${strftime(%Y-%m-%d %H:%M)}"/>
<action application="set" data="RECORD_COPYRIGHT=(c) 2011"/>
<action application="set" data="RECORD_SOFTWARE=FreeSWITCH"/>
<action application="set" data="RECORD_ARTIST=FreeSWITCH"/>
<action application="set" data="RECORD_COMMENT=FreeSWITCH"/>
<action application="set" data="RECORD_DATE=${strftime(%Y-%m-%d %H:%M)}"/>
<action application="set" data="RECORD_STEREO=true"/>
<action application="record_session" data="$${base_dir}/recordings/archive/${strftime(%Y-%m-%d-%H-%M-%S)}_${destination_number}_${caller_id_number}.wav"/>
完成后,進(jìn)入FS_CLI中運(yùn)行 reloadxml
以上../freeswitch/conf/dialplan/default.xml,如果有其它的部分撥號(hào)方案需要錄音,找到對(duì)應(yīng)的撥號(hào)方案配置文件加入上述內(nèi)容即可。
四、配置文件介紹
conf\sip_profiles\internal.xml 配置sip信息
默認(rèn)路由文件:/usr/local/freeswitch/comf/dialplan/default.xml ,可以修改他
添加新的路有也可以修改文件:/usr/local/freeswitch/comf/dialplan/default
外線來(lái)電路有配置文件:/usr/local/freeswitch/comf/dialplan/public.xml
FreeSwitch的配置文件默認(rèn)是放在 FreeSwitch\Conf\ 下,最頂層是的 FreeSwitch.xml,也就是說(shuō)最先加載的就是這個(gè) XML, FreeSwitch 根據(jù)這個(gè) XML 依次加載 Conf 目錄下的其它配置文件。
- 1、conf根目錄下的文件
freeswitch.xml:主配置文件,它會(huì)使用include語(yǔ)句裝入其它文件。
vars.xml:一些常用變量,都在這個(gè)配置文件中定義。
- 2、conf下的文件夾
|-- autoload_configs:存放自動(dòng)加載的配置文件。
|-- 此文件夾下的modules.conf.xml:配置當(dāng)freeswitch啟動(dòng)時(shí)自動(dòng)裝載哪些模塊。
|-- 此文件夾下其它xml:一般來(lái)說(shuō)都是對(duì)應(yīng)每個(gè)模塊的配置文件。
|-- chatplan文件夾:存放的是聊天計(jì)劃配置文件。
|-- dialplan文件夾:存放的是撥號(hào)計(jì)劃配置文件。
|-- directory文件夾:用戶目錄,存儲(chǔ)跟用戶相關(guān)的信息。
|-- 此文件夾下的的defalut目錄是默認(rèn)的用戶目錄配置,default下的xml文件是對(duì)應(yīng)每個(gè)sip用戶的,每個(gè)sip用戶都有一個(gè)配置文件。
|-- ivr_menus文件夾:IVR菜單配置文件。
|-- jingle_profiles文件夾:連接Google Talk的相關(guān)配置文件。
|-- lang文件夾:多語(yǔ)言支持配置文件。
|-- 此文件夾下的en為英語(yǔ),fr文件夾是法語(yǔ)。
|-- mrcp_profiles文件夾:MRCP的相關(guān)配置,用于跟第三方語(yǔ)音合成和語(yǔ)音識(shí)別系統(tǒng)對(duì)接。
|-- sip_profiles文件夾:sip配置文件
|-- 此文件夾下的internal.xml:一個(gè)SIP profile,或稱作一個(gè)SIP-UA,監(jiān)聽(tīng)在本地IP及端口5060。
|-- 此文件夾下的externa.xml:另一個(gè)SIP-UA,用作外部連接,端口5080。
|-- 在 /usr/local/freeswitch/comf/directory/default 下有默認(rèn)的1000-1019共20個(gè)賬號(hào),可以通過(guò) copy 并修改其中的 user_id 來(lái)實(shí)現(xiàn)增加新的賬號(hào)
五、常用命令
# 啟動(dòng)freeswitch
freeswitch
# 關(guān)閉freeswitch
shutdown
# 后臺(tái)啟動(dòng)
freeswitch -nc
# 關(guān)閉后臺(tái)freeswitch
freeswitch -stop
# 查看FreeSWITCH是否正常啟動(dòng)
netstat -anp | grep freeswitch
# 查看狀態(tài)
sofia status
# 顯示哪些用戶已注冊(cè)
sofia status profile internal reg
# 控制臺(tái)顯示info級(jí)別日志
fs_cli -l info
# 開(kāi)啟sip消息顯示/關(guān)閉
sofia global siptrace on/off
# 退出fs_cli(不關(guān)閉fs)
/exit
六、防火墻開(kāi)放端口
FireWall Ports Network Protocol Application Protocol Description
1719 UDP H.323 Gatekeeper RAS port
1720 TCP H.323 Call Signaling
3478 UDP STUN service Used for NAT traversal
3479 UDP STUN service Used for NAT traversal
5002 TCP MLP protocol server
5003 UDP Neighborhood service
5060 UDP & TCP SIP UAS Used for SIP signaling (Standard SIP Port, for default Internal Profile)
5070 UDP & TCP SIP UAS Used for SIP signaling (For default "NAT" Profile)
5080 UDP & TCP SIP UAS Used for SIP signaling (For default "External" Profile)
8021 TCP ESL Used for mod_event_socket *
16384-32768 UDP RTP/ RTCP multimedia streaming Used for audio/video data in SIP and other protocols
5066 TCP Websocket Used for WebRTC
7443 TCP Websocket Used for WebRTC