Ubuntu16下優(yōu)化配置freeswitch

前言

接上一篇文章,不了解怎么安裝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,實測視頻傳輸流暢度會變好。

結束

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容