FreeSwitch 1.9.0 安裝配置及使用MySQL管理賬戶,並實現視訊通話
最近因為專案上的需要入手了FreeSwitch。
之前嘗試過Asterisk,但個人感覺對H264的支援不是特別友好,所以用才選擇了FreeSwitch。
安裝FreeSwitch前的準備工作:
1、VMare上安裝一個CentOS的虛擬機器
安裝CentOS 7:
我這邊選擇的配置是雙核,硬碟大小20GB,記憶體2GB,網路連線選擇橋接模式。
安裝過程中選擇最小安裝,並配置好網路連線:
耐心等待安裝完成。
安裝完成後登入進入系統,輸入
yum install net-tools
安裝完成後即可使用ifconfig命令檢視到IP地址。
使用XShell或者Putty進行遠端連線。
2、關閉防火牆
//臨時關閉
systemctl stop firewalld
//禁止開機啟動
systemctl disable firewalld
3、安裝需要的環境
首先更新一下:
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階段:
1、下載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
2、安裝odbc
因為後面會涉及到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測試是否能夠連通:
3、編譯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
4、首次執行FreeSwitch
進入/usr/local/freeswitch/bin目錄下
./freeswitch -nonat
5、連線MySQL資料庫
FreeSwitch預設是使用的SQLite資料庫,這裡我們將使用MySQL資料庫來管理FreeSwitch中的賬戶,並實現賬戶之間能夠互相撥打電話。
首先進入到/usr/local/freeswitch/conf/autoload_configs目錄下,編輯lua.conf.xml檔案
在<setting>標籤下新增如下的程式碼:
<param name="xml-handler-script" value="gen_dir_user_xml.lua"/>
<param name="xml-handler-bindings" value="directory"/>
然後在/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 =
[[<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type=" freeswitch/xml">
<section name="directory">
<domain name="]] .. req_domain .. [[">
<user id="]] .. req_user .. [[">
<params>
<param name="password" value=" FreeSwitch+ysyhL9T"/>
<param name="dial-string" value="{sip_invite_domain=${dialed_domain},
presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/>
</params>
<variables>
<variable name="user_context" value="default"/>
</variables>
</user>
</domain>
</section>
</document>]]
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 =
[[<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type=" freeswitch/xml">
<section name="directory">
<domain name="]] .. req_domain .. [[">
<user id="]] .. req_user .. [[">
<params>
<param name="password" value="]] .. u.password .. [["/>
<param name="dial-string" value="{sip_invite_domain=${dialed_domain},
presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/>
</params>
<variables>
<variable name="user_context" value="default"/>
</variables>
</user>
</domain>
</section>
</document>]]
end))
編輯/usr/local/freeswitch/conf/directory/default.xml
刪除如下程式碼
<group name="default">
<users>
<X-PRE-PROCESS cmd="include" data="default/*.xml"/>
</users>
</group>
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
<extension name="Local_Extension2">
<condition field="destination_number" expression="^([0-9][0-9][0-9][0-9])$">
<action application="export" data="dialed_extension=$1"/>
<action application="set" data="call_timeout=10"/>
<action application="set" data="hangup_after_bridge=true"/>
<action application="set" data="continue_on_fail=false"/>
<action application="bridge" data="user/${dialed_extension}@${domain_name}"/>
</condition>
</extension>
PS:該行程式碼需要放在<context name="default">後面
在FreeSwitch控制檯按F6或者輸入reloadxml,此時可以使用X-Lite或者Zoiper進行測試:
賬號1輸入8003,密碼12345,Domain輸入虛擬機器的IP地址
賬號2輸入8004,密碼12345,Domain輸入虛擬機器的IP地址
測試互打是否能夠通話。
6、支援視訊通話
編輯/usr/local/freeswitch/conf/vars.xml
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=OPUS,G722,PCMU,PCMA,VP8,H263,H264"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=OPUS,G722,PCMU,PCMA,VP8,H263,H264"/>
編輯/usr/local/freeswitch/conf/sip_profiles/internal.xml檔案,將原有的inbound-codec-prefs和outbound-codec-prefs修改成如下:
<param name="inbound-proxy-media" value="true"/>
<param name="inbound-codec-prefs" value="$${global_codec_prefs},H263,H264"/>
<param name="outbound-codec-prefs" value="$${global_codec_prefs},H263,H264"/>
在FreeSwitch控制檯按F6或者輸入reloadxml即可支援視訊通話功能。
測試時使用X-Lite或者Zoiper,通話時選擇視訊通話,即可。