前言
接上一篇文章,不了解怎么安裝freeswitch的可以去參考下freeswitch安裝教程
使用mysql存儲賬戶數(shù)據(jù)
默認情況下,freeswitch安裝完啟動后是有20個默認賬戶的,這些賬戶都是使用默認存貯方式存在freeswitch內置的SQLit數(shù)據(jù)庫的,這個對我們后期的使用和維護有點不方便,至少對我現(xiàn)有業(yè)務來說不方便管理,默認的增加賬戶還要新建xml文件來進行配置,略顯麻煩,所以看了下文檔,是可以更改賬戶數(shù)據(jù)庫的,本文介紹如何使用mysql來存儲賬戶信息。
-
安裝mysql
1、命令行安裝mysql
sudo apt-get install mysql-server
sudo apt isntall mysql-client
sudo apt install libmysqlclient-dev
安裝過程會提示設置數(shù)據(jù)庫密碼的,注意設置一下,安裝完后可以用一下命令測試是否安裝成功:
sudo netstat -tap | grep mysql
2、配置mysql
如果需要開放遠程訪問數(shù)據(jù)庫,需要編輯mysql的配置文件:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
注釋掉bind-address = 127.0.0.1:
保存退出后,使用命令行進入mysql,執(zhí)行授權命令:
grant all on *.* to root@'%' identified by '你的密碼' with grant option;
flush privileges;
然后執(zhí)行quit命令退出mysql服務,執(zhí)行如下命令重啟mysql:
service mysql restart
-
安裝ODBC
apt-get install unixodbc-dev
配置odbc驅動
1、先下載驅動包,下面提供一個5.3的Ubuntu 64位下載地址,有需要其他版本的可以到官網(wǎng)選擇對應版本下載
https://dev.mysql.com/get/Downloads/Connector-ODBC/5.3/mysql-connector-odbc-5.3.11-linux-ubuntu16.04-x86-64bit.tar.gz
下載完先解壓出來
tar -zxvf mysql-connector-odbc-5.3.11-linux-ubuntu16.04-x86-64bit.tar.gz
解壓后,拷貝lib里面的.so到/usr/lib/x86_64-linux-gnu/odbc/ ,
拷貝命令如下:
cp libmyodbc5w.so /usr/lib/x86_64-linux-gnu/odbc/
cp libmyodbc5S.so /usr/lib/x86_64-linux-gnu/odbc/
cp libmyodbc5a.so /usr/lib/x86_64-linux-gnu/odbc/
2、修改配置文件
vim /etc/odbcinst.ini
增加如下內容:
[MySQL ODBC 5.3 Unicode Driver]
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc5w.so
SETUP=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc5S.so
UsageCount=1
[MySQL ODBC 5.3 ANSI Driver]
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc5a.so
SETUP=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc5S.so
UsageCount=1
3、配置ODBC
vi /etc/odbc.ini 增加如下內容:
[freeswitch]
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc5w.so
DATABASE = freeswitch
DESCRIPTION = freeswitch core
SERVER = 127.0.0.1
UID = freeswitch
PASSWORD = 123456
PORT = 3306
SOCKET =
[sofia_internal]
Driver =/usr/lib/x86_64-linux-gnu/odbc/libmyodbc5w.so
DATABASE = sofia_internal
DESCRIPTION = sofia internal
SERVER = 127.0.0.1
UID = freeswitch
PASSWORD = 123456
PORT = 3306
SOCKET =
以上內容主要要修改下:
DATABASE:這個你用來存freeswitch用戶的數(shù)據(jù)庫名稱
UID:數(shù)據(jù)庫用戶名
PASSWORD:數(shù)據(jù)庫密碼
其他的端口那些可以看情況要不要改了。
4、測試
isql -v freeswitch //這個freeswitch是對應上面的配置的第一行中括號里的名稱,上改了這個要對應上,還有下面的配置lua腳本里dbh里面相應的也要修改
有出現(xiàn)Connected!就說明配置沒有問題。
-
配置freeswitch
需要重新編譯下freeswitch,在/usr/local/src/freeswitch目錄下
./bootstrap.sh -j
./configure --enable-core-odbc-support
make
make install
更改freeswitch配置文件,首先進入到/usr/local/freeswitch/conf/autoload_configs目錄下,編輯lua.conf.xml文件,添加如下的代碼:
<param name="xml-handler-script" value="gen_dir_user_xml.lua"/>
<param name="xml-handler-bindings" value="directory"/>
然后在/usr/local/freeswitch/scripts/下創(chuàng)建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","數(shù)據(jù)庫賬號","數(shù)據(jù)庫密碼")
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>
編輯/usr/local/freeswitch/conf/dialplan/default.xml配置文件:
在<context name="default">后面添加如下代碼:
<extension name="Local_Extension2">
<condition field="destination_number" expression="^([a-zA-Z_0-9]{3,10})$">
<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>
連接mysql,新建數(shù)據(jù)庫
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;
用戶表里需要增加說明用戶自己添加就行了,只需要在數(shù)據(jù)庫里增加一條就可以使用了。
freeswitch
啟動后,可以使用你數(shù)據(jù)庫里的賬戶進行登錄了。
配置客戶端進行點對點通信
freeswitch提供三種數(shù)據(jù)處理方式,分別是:
1、默認
客戶端數(shù)據(jù),比如音視頻這些,會發(fā)送到freeswitch,freeswitch進行協(xié)商控制編碼,然后轉發(fā)給目的客戶端,這個模式下可以在客戶端音視頻編碼不一的情況下提供轉換,支持錄音、二次撥號等功能。
2、透傳模式
sip協(xié)議控制數(shù)據(jù)經(jīng)過fs處理,但是當通信雙方成功建立了連接之后,具體的通信數(shù)據(jù)直接從會話發(fā)起方發(fā)送到接受方,沒有錄音,二次撥號等功能。
3、代理模式
媒體通過freeswitch轉發(fā),但是不處理媒體,不支持轉碼,不支持錄音、二次轉播等。
因為我測試了默認模式下有時候視頻通話會卡頓,所以需要修改為第二種模式,音視頻通過p2p進行傳輸,提高視頻流暢度,配置方法如下:
conf\sip_profiles\internal.xml 在 sip_profile 中設置proxy media 模式 取消下面這行的注釋,
<param name="inbound-proxy-media" value="true"/>
重新加載xml,實測視頻傳輸流暢度會變好。