最近因为项目上的需要入手了FreeSwitch。
之前尝试过Asterisk,但个人感觉对H264的支持不是特别友好,所以用才选择了FreeSwitch。
安装FreeSwitch前的准备工作:
安装CentOS 7:
我这边选择的配置是双核,硬盘大小20GB,内存2GB,网络连接选择桥接模式。
安装过程中选择最小安装,并配置好网络连接:
耐心等待安装完成。
安装完成后登录进入系统,输入
yum install net-tools
安装完成后即可使用ifconfig命令查看到IP地址。
使用XShell或者Putty进行远程连接。
//临时关闭
systemctl stop firewalld
//禁止开机启动
systemctl disable firewalld
首先更新一下:
yum update
然后安装FreeSwitch需要的环境:
yum install -y git gcc-c++ autoconf automake libtool wget python ncurses-devel zlib-devel libjpeg-devel openssl-devel e2fsprogs-devel sqlite-devel libcurl-devel pcre-devel speex-devel ldns-devel libedit-devel libxml2-devel libyuv-devel opus-devel libvpx-devel libvpx2* libdb4* libidn-devel unbound-devel libuuid-devel lua-devel libsndfile-devel yasm-devel libtiff-devel yasm
好了,准备工作就到此为止!
下面就进入到下载安装FreeSwitch阶段:
//进入/usr/local/src目录
cd /usr/local/src
//下载最新版本的FreeSwitch,我这里下载到的是1.9.0版本
git clone https://freeswitch.org/stash/scm/fs/freeswitch.git
//进入FreeSwitch目录
cd /usr/local/src/freeswitch
增加mod_nuimrcp模块
编辑 vim ./build/modules.conf.in
修改 #asr_tts/mod_unimrcp 为 asr_tts/mod_unimrcp
因为后面会涉及到odbc的安装,所以先安装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 =数据库地址
PORT =3306
DATABASE = freeswitch
OPTION =67108864
CHARSET = UTF8
USER = 数据库账号
PASSWORD = 数据库密码
Threading = 0
输入:isql -v freeswitch测试是否能够连通:
在/usr/local/src/freeswitch目录下
./bootstrap.sh -j
./configure --enable-core-odbc-support #如果读者不想使用mysql管理,只需要执行./configure即可
make
make install
//安装声音文件
make cd-sounds-install
make cd-moh-install
进入/usr/local/freeswitch/bin目录下
./freeswitch -nonat
FreeSwitch默认是使用的SQLite数据库,这里我们将使用MySQL数据库来管理FreeSwitch中的账户,并实现账户之间能够互相拨打电话。
首先进入到/usr/local/freeswitch/conf/autoload_configs目录下,编辑lua.conf.xml文件
在
然后在/usr/local/freeswitch/scripts/下创建gen_dir_user_xml.lua文件
freeswitch.consoleLog("NOTICE","lua take the users...\n");
local req_domain = params:getHeader("domain")
local req_key = params:getHeader("key")
local req_user = params:getHeader("user")
local dbh = freeswitch.Dbh("freeswitch","数据库账号","数据库密码")
if dbh:connected() == false then
freeswitch.consoleLog("notice", "gen_dir_user_xml.lua cannot connect to database" .. dsn .. "\n")
return
end
XML_STRING =
[[
]]
local my_query = string.format("select password from userinfo where username='%s' limit 1", req_user)
assert (dbh:query(my_query, function(u) -- there will be only 0 or 1 iteration (limit 1)
XML_STRING =
[[
]]
end))
编辑/usr/local/freeswitch/conf/directory/default.xml
删除如下代码
MySQL数据库中,创建freeswitch数据库,添加如下的表,并插入元素:
CREATE TABLE `userinfo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`password` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `userinfo`(`id`, `username`, `password`) VALUES (19, '8003', '12345');
INSERT INTO `userinfo`(`id`, `username`, `password`) VALUES (20, '8004', '12345');
修改拨号计划
编辑/usr/local/freeswitch/conf/dialplan/default.xml
PS:该行代码需要放在
在FreeSwitch控制台按F6或者输入reloadxml,此时可以使用X-Lite或者Zoiper进行测试:
账号1输入8003,密码12345,Domain输入虚拟机的IP地址
账号2输入8004,密码12345,Domain输入虚拟机的IP地址
测试互打是否能够通话。
编辑/usr/local/freeswitch/conf/vars.xml
编辑/usr/local/freeswitch/conf/sip_profiles/internal.xml文件,将原有的inbound-codec-prefs和outbound-codec-prefs修改成如下:
在FreeSwitch控制台按F6或者输入reloadxml即可支持视频通话功能。
测试时使用X-Lite或者Zoiper,通话时选择视频通话,即可。