热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

freeswitch改用mysql_FreeSwitch安装及使用(含启用内置mariadb(mysql))

-lang-enfreeswitch-sounds-en-*freeswitch-sounds-music-*freeswitch-luafreeswitch-xml-cdrfre

-lang-en freeswitch-sounds-en-* freeswitch-sounds-music-*

freeswitch-lua freeswitch-xml-cdr

freeswitch-database-mariadb

systemctl enable freeswitch

4、使用内置mariadb数据库:注意,如果使用FS的mariadb支持就不能使用最新的mariadb,要用centos自带的,否则mysql

C connector版本不兼容!

yum install -y mariadb mariadb-sever

service mariadb start

systemctl enable mariadb

mysql_secure_installation

上面修改root用户密码,后面需要创建freeswitch的空数据库(建议用默认字符集)

5、修改FS配置文件,启用mariadb:里面默认启用的是pgsql,mariadb的被注释了,启用即可

vi

/etc/freeswitch/autoload_configs/pre_load_modules.conf.xml

6、修改FS配置文件,让FS的核心使用mariadb(mysql)数据库:需修改 core-db-dsn 或

odbc-dsn 数据库连接的相关信息,按上面自己设置的内容连接,连接串的格式为

mariadb://Server=localhost;Database=freeswitch;Uid=freeswitch;Pwd=pass;

vi

/etc/freeswitch/autoload_configs/switch.conf.xml

vi

/etc/freeswitch/autoload_configs/db.conf.xml

vi

/etc/freeswitch/sip_profiles/internal.xml

vi

/etc/freeswitch/sip_profiles/internal-ipv6.xml

7、启动FS

service freeswitch start

小记说明:测试运行正常,安装后配置文件中 mod_b64、mod_png、mod_av

这几个默认存在的模块都不可用,而且FS也没有相关的包,开发中需使用的ESL库(libesl.a)也不可用(没有相关包,安装了

freeswitch.devel

包也不包含,必须自己编译,所以,还是要下载源代码,又回到原点了)...,考虑到实际使用,看来源码编译安装还是不可替代的!所以吗,

yum安装,仅对一般使用者,对有扩展开发的还是不行!!

======FS1.10====== 源代码编译

======================

1、centos7.7 最小安装

2、FS的源代码编译基础环境,这里使用yum-builddep工具,基于FS的yum包依赖库批量安装,简单了很多:

yum install -y

https://files.freeswitch.org/repo/yum/centos-release/freeswitch-release-repo-0-1.noarch.rpm

epel-release yum-utils

yum-builddep -y freeswitch

yum install -y yum-plugin-ovl centos-release-scl

rpmdevtools git

yum install -y devtoolset-4-gcc*

scl enable devtoolset-4 'bash'

3、下面这个是对mod_av的补充,mod_av需要libavformat-dev,但centos没有,通过第三方yum库安装ffmpeg-devel包实现(yum的FS版本里面是没有mod_av、mod_b64、mod_png的,所以上面的安装也就没有):

rpm --import

http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

rpm -Uvh

http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

yum install -y ffmpeg-devel

4、开始安装:

cd /usr/local/src

git clone -b v1.10

https://github.com/signalwire/freeswitch.git

freeswitch

cd /usr/local/src/freeswitch

./bootstrap.sh -j

./configure --enable-portable-binary \

--prefix=/usr --localstatedir=/var --sysconfdir=/etc

\

--with-gnu-ld --with-python --with-erlang --with-openssl

\

--enable-core-odbc-support --enable-zrtp

make

make -j install

make -j cd-sounds-install

make -j cd-moh-install

5、OK,又回到了熟悉的状态,yum没有的模块都回来了

6、对FS1.10新添加的mariadb模块的编译安装:

cd

/usr/local/src/freeswitch/src/mod/databases/mod_mariadb

make

make install

================老版本安装小记========================

******************************

更新说明:freeswitch已经切换到新的版本周期(1.10.X),下面文字的说明都是针对1.8及1.6的版本,请注意!

基本来说,1.10.X版本已经可以yum安装,但yum安装会把各个模块都打成独立的包,而且默认安装的基本包里面会把一般你不用的都给默认安装了,如mod_signalwire

******************************

1、FS1.8 安装

FS 用yum在centos7.3无法安装,在centos7.1安装OK

(centos7.1可以yum安装,但安装后还是发现有缺失文件现象,折腾好多次了,其实还是编译安装靠谱些)

#这是centos7下面对 delta的补充安装,centos7需加上这个

yum provides '*/applydeltarpm'

yum install deltarpm

#需要erlang,对centos6和7都一样的,FS官方没有提这个,但如果没装就有部分模块会无法工作:(主要是ERlang和lua的模块,不要忘记erlang和lua也是FS的开发语言哦~)

wget

http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm

rpm -Uvh erlang-solutions-1.0-1.noarch.rpm

rpm --import

http://packages.erlang-solutions.com/rpm/erlang_solutions.asc

yum install -y erlang lua*

#如果是yum安装,需要freeswitch的rpm支持,否则不需要

yum install -y

http://files.freeswitch.org/freeswitch-release-1-6.noarch.rpm

epel-release

#需要更多的支持环境,centos6和centos7是不同的,这下面的包在centos7下有些会找不到

yum install -y alsa-lib-devel autoconf automake bison

broadvoice-devel bzip2 curl-devel db-devel e2fsprogs-devel

flite-devel g722_1-devel gcc-c++ gdbm-devel gnutls-devel

ilbc2-devel ldns-devel libcodec2-devel libcurl-devel libedit-devel

libidn-devel libjpeg-devel libmemcached-devel libogg-devel

libsilk-devel libsndfile-devel libtheora-devel libtiff-devel

libtool libuuid-devel libvorbis-devel libxml2-devel lua-devel

lzo-devel mongo-c-driver-devel ncurses-devel net-snmp-devel

openssl-devel opus-devel pcre-devel perl perl-ExtUtils-Embed

pkgconfig portaudio-devel postgresql-devel python26-devel

python-devel soundtouch-devel speex-devel sqlite-devel

unbound-devel unixODBC-devel wget which yasm zlib-devel

yum install perl cpio curl curl-devel zlib-devel openssl-devel

expat-devel gettex-devel perl-devel build-essential tcl8.4 tk8.4

gettext -y

yum安装时可能会提示freeswitch的404错,是因为freeswitch已经停止了centos6的支持,不提供相关rpm文件了!----

如果这样,只能在 /etc/yum.repos.d 删除相关文件源定义,而后老老实实用源码编译安装 或

换centos7 了...

#centos7下支持环境安装,补充上面的(因为有些库在centos6和7的命名不同):

yum install -y python-devel gettext-devel tcl db4-devel tk

epel-release

#centos6的git版本过老,需要进行git升级,以拉取FS的源代码,不装yum的版本,因为那个版本也好老了:(这是为源码编译而进行的准备工作,yum安装不需要这个)

yum remove git

wget https://github.com/git/git/archive/master.tar.gz

tar -zxvf master.tar.gz

cd master

make configure

./configure --prefix=/usr/local/git

make && make install

ln -f /usr/local/git/bin/git /usr/bin/

git时提示ssl连接错误,则更新nss和curl:

yum update nss curl libcurl

补充说明,装上面的那么多东东,是因为直接装下面的会有若干个库加载不了,如果上面都装了下面就OK了(但已经装了好多好多东西是吧...

)

开始进入正式安装了:

==================下面是是yum方式,在centos7.1下成功,如果deltarpm没有安装,会导致有部分依赖库被跳过,fs程序运行异常,所以前面的安装要到位,否则下面安装是不会报错,系统跑起来就会经常莫名其妙出问题了)

yum install -y

http://files.freeswitch.org/freeswitch-release-1-8.noarch.rpm

epel-release

yum install -y freeswitch-config-vanilla freeswitch-lang-*

freeswitch-sounds-*

systemctl enable freeswitch

==================下面是编译方式(最好是用编译模式)

cd /usr/local/src

#这个是1.6生产环境版本,1.6已经过期,FS官方建议使用1.8

git clone -b v1.6

https://freeswitch.org/stash/scm/fs/freeswitch.git freeswitch

#这个是1.8生产环境版本

git clone -b v1.8

https://freeswitch.org/stash/scm/fs/freeswitch.git freeswitch

#这个是最新开发版:

git clone https://freeswitch.org/stash/scm/fs/freeswitch.git

freeswitch

cd /usr/local/src/freeswitch

./bootstrap.sh -j

./configure -C --enable-portable-binary --enable-sctp\

--prefix=/usr

--localstatedir=/var --sysconfdir=/etc \

--with-gnu-ld

--with-python --with-erlang --with-openssl \

--enable-core-odbc-support --enable-zrtp \

--enable-core-pgsql-support \

--enable-static-v8

--disable-parallel-build-v8

make -j (注:出现等待未结束的进程而死锁时,不用j参数重新编译)

报错 cJSON.c #pragma GCC diag.. 注释掉这几行 或 更新GCC

======centos6.8为GCC4.4.7,下面是更新gcc

wget http://people.centos.org/tru/devtools-2/devtools-2.repo

mv devtools-2.repo /etc/yum.repos.d

yum install devtoolset-2-gcc devtoolset-2-binutils

devtoolset-2-gcc-c++

mv /usr/bin/gcc /usr/bin/gcc-4.4.7

mv /usr/bin/g++ /usr/bin/g++-4.4.7

mv /usr/bin/c++ /usr/bin/c++-4.4.7

ln -s /opt/rh/devtoolset-2/root/usr/bin/gcc /usr/bin/gcc

ln -s /opt/rh/devtoolset-2/root/usr/bin/c++ /usr/bin/c++

ln -s /opt/rh/devtoolset-2/root/usr/bin/g++ /usr/bin/g++

gcc --version

报错/usr/local/src/freeswitch/libs/sofia-sip/libsofia-sip-ua/tport

tport_type_sctp.c:206:10: error: variable 'initmsg' has

initializer but incomplete type

=======修改代码struct sctp_initmsg initmsg = { 0

};为

typedef struct {

uint16_t sinit_num_ostreams;

uint16_t sinit_max_instreams;

uint16_t sinit_max_attempts;

uint16_t sinit_max_init_timeo;

} sctp_initmsg;

#define SCTP_INITMSG 2

sctp_initmsg initmsg = { 0 };

(注,这是我的原创修改,centos6下编译都会报这个错误的,我是化了很多时间才从linuxcore源代码的头文件定义中找到了相关的内容而后修改了这里的代码,错误的根本原因其实还就是因为centos6实在太老了...)

报错You must install libopus-dev to build mod_opus. Stop. 但确实已经

yum 安装 libopus-dev 或 opus-devel 后依然报错:

========删除opus,编译安装新版

yum remove opus

wget https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz

tar xvfz opus-1.3.1.tar.gz

cd opus-1.3.1

./configure

make

make install

cp /usr/lib/pkgconfig/opus.* /usr/lib64/pkgconfig/

cd /usr/local/src/freeswitch

make clean

./configure ..... 重新配置以重新生成make文件

make

报错You must install libks to build mod_signalwire. 或

You must install signalwire-client-c:

========最简单就是在modules.conf.xml里面取消mod_signalwire.

make -j install

make -j cd-sounds-install

make -j cd-moh-install

+ Install non english sounds:

replace XX with language

+

+ (ru : Russian)

(fr : French)

+

+

------------------------------------

+

+

make cd-sounds-XX-install

+

+

make uhd-sounds-XX-install

+

+

make hd-sounds-XX-install

+

+

make sounds-XX-install

+

+

+

+ Upgrade to latest:

+

+

----------------------------------

+

+

make current

+

+

+

+ Rebuild all:

+

+

----------------------------------

+

+

make sure

+

+

+

+ Install/Re-install default

config: +

+

----------------------------------

+

+

make samples

+

=============================下面是运行

创建pid目录,因为下面是用普通用户运行FS,FS无法创建运行目录:

mkdir /var/run/freeswitch

启动: freeswitch //可用参数 -log /var/log/freeswitch -conf

/etc/freeswitch -db /usr/share/freeswitch

useradd freeswitch -g daemon -s /sbin/nologin -M

后台运行:freeswitch -u freeswitch -g daemon -nc -rp

修改权限,用freeswitch这个用户运行:

chown -R freeswitch:daemon /etc/freeswitch

chown -R freeswitch:daemon /var/lib/freeswitch

chown -R freeswitch:daemon /usr/share/freeswitch

chown -R freeswitch:daemon /var/log/freeswitch

chown -R freeswitch:daemon /var/run/freeswitch

下面是安装配置php7.2、nginx和mysql(基础安装):

这是centos7的:

rpm -Uvh

https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

rpm -Uvh

https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

yum -y install php72w php72w-common php72w-embedded php72w-fpm

php72w-gd php72w-mbstring php72w-mysql php72w-opcache php72w-pdo

php72w-xml

这是centos6的:

rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm

rpm -Uvh

http://mirrors.ustc.edu.cn/epel/epel-release-latest-6.noarch.rpm

yum -y install php71w php71w-common php71w-embedded php71w-fpm

php71w-gd php71w-mbstring php71w-mysqlnd php71w-opcache php71w-pdo

php71w-xml

yum -y install nginx mariadb mariadb-server

service nginx start #启动

chkconfig nginx on #设为开机启动

vi /etc/nginx/nginx.conf

==============

location / {

root /var/www;

index index.html index.php;

}

location ~ \.php$ {

root /var/www;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME

$document_root$fastcgi_script_name;

include

fastcgi_params;

}

================

vi /etc/php-fpm.d/www.conf

=======修改user和group

user = freeswitch

group = daemon

==========================

service php-fpm start #启动

chkconfig php-fpm on #设为开机启动

/usr/sbin/nginx -s reload #修改配置文件后,平滑启动nginx

service mariadb start

chkconfig mariadb on

mysql_secure_installation #初始数据库安装

vi /etc/my.cnf

===========在[mysqld]标签下添加

init_connect='SET collation_connection = utf8_unicode_ci'

init_connect='SET NAMES utf8'

character-set-server=utf8

collation-server=utf8_unicode_ci

skip-character-set-client-handshake

===============================

vi /etc/my.cnf.d/client.cnf

==============在[client]中添加

default-character-set=utf8

==============================

vi /etc/my.cnf.d/mysql-clients.cnf

=====================在[mysql]中添加

default-character-set=utf8

===============================

##如果nginx和php运行发现错误,运行 getenforce 如果结果为enforcing 那就是开启了

selinux,需要设置:

##临时关闭selinux: setenforce 0

##永久关闭:vi /etc/selinux/config 设置disabled

同步的权限:

1、web的user和group 修改为 freeswich daemon

2、chown -R freeswitch:daemon /var/lib/php

3、chown -R freeswitch:daemon /var/www (web的根路径)

=============================

编译php的命令:(线程安全模式,apache2.4下)

wget https://www.php.net/distributions/php-7.3.5.tar.bz2

tar xfv wget

https://www.php.net/distributions/php-7.3.5.tar.bz2

cd php-7.3.5.tar.bz2

./configure --with-apxs2=/usr/local/httpd2.4.39/bin/apxs

--enable-mysqlnd --with-mysqli=mysqlnd --with-openssl

--with-pdo-mysql=mysqlnd --enable-mbstring --with-freetype-dir

--with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr

--enable-xml --with-curl --enable-opcache --enable-sockets

--enable-maintainer-zts

make && make install

cp php.ini-production /usr/local/lib/php.ini

需注意,php.ini中需要启用opcache模块,添加:

zend_extension=/usr/local/lib/php/extensions/no-debug-zts-20180731/opcache.so

修改httpd.conf,添加:

SetHandler application/x-httpd-php

/usr/local/httpd2.4.39/bin/apachectl restart

编译时出现错误 pthread_sigmask@@GLIBC_2.2.5' is defined in DSO

/lib64/libpthread.so.0 so try adding it to the ..

vi /etc/ld.so.conf 添加一行:/lib64

make clean 后重新编译

=========Freeswitch

使用相关说明====================

客户端:fs_cli -rRS

设置自动启动服务:

====================================

=========仅centos6下,在centos7下无效

cd /etc/init.d

touch freeswitch

chmod a+x freeswitch

vi freeswitch (====复制内包含的内容====)

================

#! /bin/sh

#

# freeswitch: Starts the freeswitch

Daemon

#

# chkconfig: 345 96 02

# processname: freeswitch

# description: Freeswitch fedora init script \

# config:

# Author: gled

# Source function library.

. /etc/init.d/functions

. /etc/sysconfig/network

PATH=/sbin:/usr/sbin:/bin:/usr/bin

DESC='FreeSwitch Voice Switching System'

NAME=freeswitch

DAEMON=/usr/bin/$NAME

PIDFILE=/var/run/freeswitch/$NAME.pid

do_setlimits() {

ulimit -c unlimited

ulimit -d unlimited

ulimit -f unlimited

ulimit -i unlimited

ulimit -n 999999

ulimit -q unlimited

ulimit -u unlimited

ulimit -v unlimited

ulimit -x unlimited

ulimit -s 244

ulimit -l unlimited

return 0

}

base=${0##*/}

do_start() {

do_setlimits

$DAEMON -nc

RETVAL=$?

if [ $RETVAL = 0 ]; then

success $'$base startup'

else

failure $'$base startup'

fi

echo

return $RETVAL

}

do_stop() {

$DAEMON -stop

RETVAL=$?

[ $RETVAL = 0 ] && success $'$base shutdown' || failure

$'$base shutdown'

rm -f $LOCKFILE

echo

return $RETVAL

}

# See how we were called.

case '$1' in

start)

do_start

;;

stop)

do_stop

;;

restart)

do_stop

echo 'Waiting for daemon to exit...'

sleep 5

do_start

;;

*)

echo $'Usage: $0 {start|stop}'

exit 2

;;

esac

exit $RETVAL

==============================

下面是添加系统服务,以自动启动:

chkconfig --add freeswitch

chkconfig freeswitch on

#设置自动启动服务:===================centos7下面自启动

vi /usr/lib/systemd/system/freeswitch.service

=================

[Unit]

Description=FreeSWITCH

After=syslog.target network.target

After=mariadb.service

[Service]

Type=forking

PIDFile=/var/run/freeswitch/freeswitch.pid

User=root

Group=root

WorkingDirectory=/usr

#ExecStart=/usr/bin/freeswitch -u freeswitch -g daemon -nc

ExecStart=/usr/bin/fs.sh

ExecReload=/usr/bin/kill -HUP $MAINPID

ExecStop=/usr/bin/killall -9 freeswitch

[Install]

WantedBy=multi-user.target

======================

vi /usr/bin/fs.sh

=================

#!/bin/sh

mkdir /run/freeswitch

chown -R freeswitch:daemon /run/freeswitch

ulimit -c unlimited

ulimit -d unlimited

ulimit -f unlimited

ulimit -i unlimited

ulimit -n 999999

ulimit -q unlimited

ulimit -u unlimited

ulimit -v unlimited

ulimit -x unlimited

ulimit -s 244

ulimit -l unlimited

freeswitch -u freeswitch -g daemon -nc

======================

下面是添加系统服务,以自动启动:

chmod +x /usr/bin/fs.sh

systemctl daemon-reload

systemctl enable freeswitch.service

systemctl start freeswitch.service

设置防火墙Centos7:

firewall-cmd --permanent --zone=public --add-port=1719/udp

firewall-cmd --permanent --zone=public --add-port=1720/tcp

firewall-cmd --permanent --zone=public --add-port=3478/udp

firewall-cmd --permanent --zone=public --add-port=3479/udp

firewall-cmd --permanent --zone=public --add-port=5002/tcp

firewall-cmd --permanent --zone=public --add-port=5003/udp

firewall-cmd --permanent --zone=public --add-port=5060/udp

firewall-cmd --permanent --zone=public --add-port=5060/tcp

firewall-cmd --permanent --zone=public --add-port=5070/tcp

firewall-cmd --permanent --zone=public --add-port=5070/udp

firewall-cmd --permanent --zone=public --add-port=5080/udp

firewall-cmd --permanent --zone=public --add-port=5080/tcp

firewall-cmd --permanent --zone=public --add-port=8021/tcp

firewall-cmd --permanent --zone=public --add-port=5066/tcp

firewall-cmd --permanent --zone=public --add-port=7443/tcp

firewall-cmd --permanent --zone=public --add-port=16384-32768/udp

firewall-cmd --reload

设置防火墙Centos6:

iptables -A INPUT -p udp --dport 1719 -j ACCEPT

iptables -A INPUT -p tcp --dport 1720 -j ACCEPT

iptables -A INPUT -p udp --dport 3478 -j ACCEPT

iptables -A INPUT -p udp --dport 3479 -j ACCEPT

iptables -A INPUT -p tcp --dport 5002 -j ACCEPT

iptables -A INPUT -p udp --dport 5003 -j ACCEPT

iptables -A INPUT -p tcp --dport 5060 -j ACCEPT

iptables -A INPUT -p udp --dport 5060 -j ACCEPT

iptables -A INPUT -p tcp --dport 5070 -j ACCEPT

iptables -A INPUT -p udp --dport 5070 -j ACCEPT

iptables -A INPUT -p tcp --dport 5080 -j ACCEPT

iptables -A INPUT -p udp --dport 5080 -j ACCEPT

iptables -A INPUT -p tcp --dport 8021 -j ACCEPT

iptables -A INPUT -p tcp --dport 5066 -j ACCEPT

iptables -A INPUT -p tcp --dport 7443 -j ACCEPT

iptables -A INPUT -p udp --dport 16384:32768 -j

ACCEPT

/etc/rc.d/init.d/iptables save

service iptables restart

fs命令测试(在FS控制台或客户端运行):

FS> sofia status profile internal (显示整体信息,含多少用户已注册;)

FS> originate user/1000 &echo (拨打1000并执行echo程序)

FS> originate sofia/profile/internal/1000 9999

(相当于在软电话1000上拨打9999)

FS> originate sofia/profile/internal/1000 9999 XML default

(同上)

FS> sofia status profile internal reg 查看注册用户

编译安装后的系统目录:

prefix:

/usr

exec_prefix:

/usr

bindir:

${exec_prefix}/bin

confdir:

/etc/freeswitch

libdir:

/usr/lib

datadir:

/usr/share/freeswitch

localstatedir:

/var/lib/freeswitch

includedir:

/usr/include/freeswitch

certsdir:

/etc/freeswitch/tls

dbdir:

/var/lib/freeswitch/db

grammardir:

/usr/share/freeswitch/grammar

htdocsdir:

/usr/share/freeswitch/htdocs

fontsdir:

/usr/share/freeswitch/fonts

logfiledir:

/var/log/freeswitch

/usr/local/freeswitch/log

modulesdir:

/usr/lib/freeswitch/mod

pkgconfigdir:

/usr/lib/pkgconfig

recordingsdir:

/var/lib/freeswitch/recordings

imagesdir:

/var/lib/freeswitch/images

runtimedir:

/var/run/freeswitch

scriptdir:

/usr/share/freeswitch/scripts

soundsdir:

/usr/share/freeswitch/sounds

storagedir:

/var/lib/freeswitch/storage

cachedir:

/var/cache/freeswitch

------------------

测试号码 | 说明

------------------

9664 | 保持音乐

9196 | echo,回音测试

9195 | echo,回音测试,延迟5秒

9197 | milliwatte

extension,铃音生成

9198 | TGML 铃音生成示例

5000 | 示例IVR

4000 | 听取语音信箱

33xx |

电话会议,48K(其中xx可为00-99,下同)

32xx | 电话会议,32K

31xx | 电话会议,16K

30xx | 电话会议,8K

2000-2002 | 呼叫组

1000-1019 | 默认分机号

'F1' value='help'

'F2' value='status'

'F3' value='show channels'

'F4' value='show calls'

'F5' value='sofia status'

'F6' value='reloadxml'

'F7' value='console loglevel 0'

'F8' value='console loglevel 7'

'F9' value='sofia status profile internal'

'F10' value='sofia profile internal siptrace on'

'F11' value='sofia profile internal siptrace off'

'F12' value='version'

3、配置管理

=============!!下面配置文件项都少了第一个尖括号,注意!!!=====================

**设置语音编码

vars.xml可以设置系统默认使用的编码,为全局设置,下面两个变量,一个表示呼入,一个表示呼出。

默认没有用729,所以729编码通讯会报错,需启用

X-PRE-PROCESS cmd='set'

data='global_codec_prefs=G722,G729,G723,PCMA,PCMU,GSM'/>

X-PRE-PROCESS cmd='set'

data='outbound_codec_prefs=G722,G729,G723,PCMA,PCMU,GSM'/>

==================================

**设置中文语音

复制中文语音到 /usr/share/freeswitch/sounds,语音目录树为 zh/cn/yy/...

修改vars.xml,屏蔽英文音频资源的路径设置,添加(注意中文音频资源的路径设置,这是举例而已)

X-PRE-PROCESS cmd='set'

data='sound_prefix=$${sounds_dir}/zh/cn/yy'/>

X-PRE-PROCESS cmd='set'

data='default_language=zh'/>

X-PRE-PROCESS cmd='set' data='default_dialect=cn'/>

X-PRE-PROCESS cmd='set' data='default_voice=yy'/>

修改语音配置:

cd /etc/freeswitch/lang

cp -fr en zh

cd zh

mv en.xml zh.xml

vi zh.xml

language name='zh' say-module='zh'

sound-prefix='$${sounds_dir}/zh/cn/yy' tts-engine='cepstral'

tts-voice='yy'>

vi /etc/freeswitch/freeswitch.xml

section name='languages' `节点中增加一行

X-PRE-PROCESS cmd='include' data='lang/zh/*.xml'/>

cd /usr/local/src/freeswitch/src/mod/say/mod_say_zh

make && make install

FS> load mod _say_zh 动态加载

永久加载:/etc/freeswitch/autoload_configs/modules.conf.xml 中 load

module='mod_say_zh'/>前的注释去掉

==================================

**修改ivr

根据实际来 修改 /etc/freeswitch/ivr_menus ,配置ivr语音:

greet-long为进入ivr后首先播放的语音信息,若在timeout

时间内用户未输入信息,系统会播放greet-short信息,若用户一直未输入信息,系统在播放max-timeouts-1次greet-short语音后关闭该ivr。如果用户在timeout时间内输入了错误信息,系统会播放invalid-sound语音

=============================================================

**允许外部IP连接到event_socket,配置ESL的相关信息

vi /etc/freeswitch/autoload_configs/event_socket.conf.xml

这里是允许任意IP

configuration name='event_socket.conf' description='Socket

Client'>

settings>

param name='nat-map' value='false'/>

param name='listen-ip' value='::'/>

param name='listen-port' value='8021'/>

param name='password' value='newpassword'/>

param name='apply-inbound-acl'

value='any_v4.auto'/>

!---->

!---->

/settings>

/configuration>

或者========================

1. event_socket.conf.xml

加入允许的域,默认是domains,可以是自己的域:

param name='apply-inbound-acl' value='domains'/>

2. acl.conf.xml 按域加入ip地址或ip地址段:

list name='domains' default='deny'>

node type='allow' domain='$${domain}'/>

node type='allow' cidr='192.168.1.0/24'/>

node type='allow' cidr='127.0.0.1/24'/>

/list>

注:如果是要外部ip连接FS进行通话,直接让外部ip使用external端口即可,无需修改任何配置

=============================================================

**修改fs使用mysql

安装mysql:

yum install mysql-server

/usr/bin/mysql_secure_installation

chkconfig mysqld on

cd /usr

/usr/bin/mysqld_safe &

service mysqld start

mysql 修改默认数据引擎到

innodb,提高log文件大小,在centos6里面用新的innodb(ha_innodb_plugin,默认的innodb在centos6里面不可用):

[mysqld]

ignore-builtin-innodb

plugin-load=innodb=ha_innodb_plugin.so

# Disabling symbolic-links is recommended to prevent assorted

security risks

symbolic-links=0

default-storage-engine=INNODB

innodb_log_file_size = 512M

安装odbc:

yum install unixODBC-devel mysql-connector-odbc

===修改 /etc/odbc.ini,添加dsn,如freeswitch,注意路径和用户账号

[freeswitch]

Driver =

/usr/lib64/libmyodbc5.so

SERVER = localhost

PORT = 3306

DATABASE = freeswitch

USER = root

PASSWORD = limaoxiang

OPTION = 67108864

===修改 /etc/odbcinst.ini 检测驱动路径是否正确

=== OPTION = 67108864 即打开 FLAG_MULTI_STATEMENTS

(如果是windows,需要在设置dsn时启用 MULTI_STATEMENTS)

===isql -v freeswitch

=== 在/etc/freeswitch grep -ir dsn

而后修改相应的dsn配置,都可以修改为mysql:

vi autoload_configs/db.conf.xml

(修改odbc-dsn,后面的value部分修改为实际内容,如

value='freeswitch:root:limaoxiang' )、

vi autoload_configs/switch.conf.xml

(修改core-db-dsn,添加odbc-dsn)、

vi autoload_configs/voicemail.conf.xml

(修改odbc-dsn)、

vi autoload_configs/callcenter.conf.xml

(修改odbc-dsn)、

vi sip_profiles/internal.xml

(修改odbc-dsn)、

vi sip_profiles/internal-ipv6.xml

(修改odbc-dsn)、

vi autoload_configs/cidlookup.conf.xml

vi autoload_configs/nibblebill.conf.xml

vi autoload_configs/directory.conf.xml

vi autoload_configs/lcr.conf.xml

vi autoload_configs/easyroute.conf.xml

vi jingle_profiles/server.xml

vi skinny_profiles/internal.xml

每次修改xml后都需要重新在freeswitch控制台或者fs_cli下执行reloadxml,使得修改生效

====第一次启动,会自动创建数据库;多启动几次,一次可能不会全部创建完,尤其是使用了dsn后,需注意,如果数据库用的utf8格式,创建数据库会出错,最好用默认数据字符集!!必须开启MULTI_STATEMENTS

======================================================

|**CDR 存放到mysql中

cd

/usr/local/src/freeswitch/src/mod/event_handlers/mod_odbc_cdr

make && make install

配置odbc_cdr.conf.xml:

vi

/etc/freeswitch/autoload_configs/odbc_cdr.conf.xml

configuration name='odbc_cdr.conf' description='ODBC CDR

Configuration'>

settings>

param name='odbc-dsn'

value='freeswitch:root:limaoxiang'/>

!---->

!-- global value can be 'a-leg', 'b-leg', 'both'

(default is 'both') -->

param name='log-leg' value='both'/>

!-- value can be 'always', 'never', 'on-db-fail'

-->

param name='write-csv'

value='on-db-fail'/>

!-- location to store csv copy of CDR -->

param name='csv-path'

value='/var/log/freeswitch/odbc_cdr'/>

!-- if 'csv-path-on-fail' is set, failed INSERTs

will be placed here as CSV files otherwise they will be placed in

'csv-path' -->

param name='csv-path-on-fail'

value='/var/log/freeswitch/odbc_cdr/failed'/>

!-- dump SQL statement after leg ends -->

param name='debug-sql' value='false'/>

/settings>

tables>

!-- only a-legs will be inserted into this table

-->

table name='cdr_table_a_leg'

log-leg='a-leg'>

field name='CallId'

chan-var-name='call_uuid'/>

field name='orig_id'

chan-var-name='uuid'/>

field name='term_id'

chan-var-name='sip_call_id'/>

field name='ClientId'

chan-var-name='uuid'/>

field name='IP'

chan-var-name='sip_network_ip'/>

field name='IPInternal'

chan-var-name='sip_via_host'/>

field name='CODEC'

chan-var-name='read_codec'/>

field name='directGateway'

chan-var-name='sip_req_host'/>

field name='redirectGateway'

chan-var-name='sip_redirect_contact_host_0'/>

field name='CallerID'

chan-var-name='sip_from_user'/>

field name='TelNumber'

chan-var-name='sip_req_user'/>

field name='TelNumberFull'

chan-var-name='sip_to_user'/>

field name='sip_endpoint_disposition'

chan-var-name='endpoint_disposition'/>

field name='sip_current_application'

chan-var-name='current_application'/>

/table>

!-- only b-legs will be inserted into this table

-->

table name='cdr_table_b_leg'

log-leg='b-leg'>

field name='CallId'

chan-var-name='call_uuid'/>

field name='orig_id'

chan-var-name='uuid'/>

field name='term_id'

chan-var-name='sip_call_id'/>

field name='ClientId'

chan-var-name='uuid'/>

field name='IP'

chan-var-name='sip_network_ip'/>

field name='IPInternal'

chan-var-name='sip_via_host'/>

field name='CODEC'

chan-var-name='read_codec'/>

field name='directGateway'

chan-var-name='sip_req_host'/>

field name='redirectGateway'

chan-var-name='sip_redirect_contact_host_0'/>

field name='CallerID'

chan-var-name='sip_from_user'/>

field name='TelNumber'

chan-var-name='sip_req_user'/>

field name='TelNumberFull'

chan-var-name='sip_to_user'/>

field name='sip_endpoint_disposition'

chan-var-name='endpoint_disposition'/>

field name='sip_current_application'

chan-var-name='current_application'/>

/table>

!-- both legs will be inserted into this table

-->

table name='cdr_table_both'>

field name='CallId'

chan-var-name='uuid'/>

field name='orig_id'

chan-var-name='Caller-Unique-ID'/>

field name='TEST_id'

chan-var-name='sip_from_uri'/>

/table>

/tables>

/configuration>

FS> load mod_odbc_cdr 动态加载

永久加载:/etc/freeswitch/autoload_configs/modules.conf.xml 中添加

利用mod_odbc_query 可以实现提取数据库的内容,动态配置fs,如动态路由

利用mod_callcenter 实现呼叫中心功能,如坐席、队列、自动分配

================多域===========================

internal配置中必须禁用:

force-register-domain

force-subscription-domain

force-register-db-domain

================拨号计划========================

== 发送180 ring,开始振铃

== 暂停2秒,承上 这样才听得到振铃的声音,启下 让听2秒回铃音后回复200

== 发送200 OK 回应,摘机应答

== 前如有answer,再发200

OK并带SDP建立媒体通道播放。如没answer,则发送183,带SDP建立媒体通道,这时,播放媒体内容就成Early

Media

== 发送 bye 挂机

==设置回铃音;准备给A-leg播放,播放前会发送183进行媒体协商;因为不确定播放时间,用set,等待后继动作

==桥接;如果桥接时B-leg给180,因为前面ringback的存在,会获得183回应

== 发送180 振铃

== 桥接;忽略B-leg的早期媒体(也就是183),回应其180

== 发送180 振铃

== 发送媒体,这两句就是典型的 pre_answer(播放彩铃)



推荐阅读
  • 阿里云如何部署php(2023年最新分享)
    导读:很多朋友问到关于阿里云如何部署php的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • 目录1、将mysql数据导出到SQL文件中(数据库存在的情况)2、将现有的sql文件数据导入到数据库中(前提数据库存在) 3、利用Navicat导出SQL文件和导入SQL文件1)从 ... [详细]
  • mysqldinitializeconsole失败_mysql03误删除了所有用户解决办法
    误删除了所有用户解决办法第一种方法(企业常用)1.将数据库down掉[rootdb03mysql]#etcinit.dmysqldstopShuttingdownMySQL..SU ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Qt提供了QtSql模块来提供平台独立的基于SQL的数据库操作。这里我们所说的“平台独立”,既包括操作系统平台,有包括各个数据库平台。另外, ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 如何修改MySQL数据库密码的方法及步骤详解
    本文详细介绍了四种修改MySQL数据库密码的方法,包括使用SET PASSWORD命令、mysqladmin命令、UPDATE语句直接编辑user表的步骤和操作示例。通过本文的指导,读者可以轻松掌握修改MySQL数据库密码的技巧和方法。 ... [详细]
  • MFC程序连接MySQL成功实现查询功能,但无法实现修改操作——详解查询语句在MySQL中的使用过程
    selectxxx,xxx,xxxfromxxxwherexxxxxx,xxxxxx程序的日常开发中,我们经常会写到各种各样的简单的,复杂的查询sql语 ... [详细]
  • 语法:CREATE[索引类型]INDEX索引名称ON表名(列名)WITHFILLFACTOR填充因子值0~100GOUSE库名GOIFEXISTS(SELECT*FR ... [详细]
author-avatar
Vee-健健健
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有