1. 程式人生 > >FreeSwitch 1.9.0 安裝配置及使用MySQL管理賬戶,並實現視訊通話

FreeSwitch 1.9.0 安裝配置及使用MySQL管理賬戶,並實現視訊通話

最近因為專案上的需要入手了FreeSwitch。

之前嘗試過Asterisk,但個人感覺對H264的支援不是特別友好,所以用才選擇了FreeSwitch。

安裝FreeSwitch前的準備工作:

1、VMare上安裝一個CentOS的虛擬機器

安裝CentOS 7:

安裝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,通話時選擇視訊通話,即可。