freeswitch 部署测试流程

全文基于1.6.x版本进行调试,后续版本或许有变更,不会涉及相关性

1)源码目录说明

1、conf

可以参阅官网来配置业务所需功能,不一定完全自己开发(我这边暂时全部自己处理)

2、libs

第三方目录,具体列表可以参考同一目录下的modules.conf

例如:我们所需的:unimrcpsofia-sip(主要通信用到)

3、srcipts

包含安装时用到的各种脚本支持,可以参照 /src/mod/lanuages来辅助判断

4、src(重要)

代码核心目录

可以适当性的改变源码调整适合自己的模式,修改内置模块内容

mod

目录名称概要说明主要内容
asr_tts典型语音合成与识别可以替换需要的asr与tts
dialplans拨号规则(对来电路由解析)asterisk(内联)、xml方式(常用)
endpoints端点模块mod_sofia(默认SIP协议栈)
formats兼容的内容格式
xml_int一些初始化时的xml可以客制化对应模块
applicationsmod_db(涉及数据库)
directoriesLDAP实现
event_handlers事件处理模块包含队列和内容等处理
languages支持不同开发语言的模块
say支持不同自然语言的模块
timers时间及定时器模块

2)部署目录

1、conf(重要)

配置目录,关键目录

autoload_configs

模块配置

1、switch.conf.xml(优先级最高)

默认采用 vars.xml配置,更改后有时需要刷新。若是本配置,配置即可生效

# 例如配置日志,等同于vars.xml内配置的级别效果
<param name="loglevel" value="debug"/> 
2、logfile.conf.xml(日志输出配置)

例如日志输出位置,默认为相对路径var/log/freeswitch.log

<!--<param name="logfile" value="/var/log/freeswitch.log"/>-->
3、modules.conf.xml(定义加载的模块)

这里显示的模块是会被加载的,源码中的modules.conf 则是表示会编译。(但是可能会存在编译不成功等,这时是不会被加载的)

#1、可以预先开放MRCP协议模块
开放 asr_tts/mod_unimrcp 注释

#2、开放语音支持
# 根据自己需要的语音
# say/mod_say_zh :简体中文
# say/mod_say_en : 英文(默认开启)
开放 say/mod_say_en
# 补救安装 make mod_say_en-install
一同编译后:
# (1)freeswitch.xml 
`<section name="languages" description="Language Management">`
出现`<X-PRE-PROCESS cmd="include" data="lang/en/*.xml"/>`
也可以后续手动增加
#(2)vars.xml
出现 `<X-PRE-PROCESS cmd="set" data="sound_prefix=$${sounds_dir}/en/us/callie"/>`
#(3)freeswitch/etc/freeswitch/lang
  出现对应en模块
dialplan

拨号规则文件

sip_profiles

sip配置文件

2、var目录(日志)

默认采用SQLite数据库,当然也可以自定义数据库(但是目前没有使用)

var/log/freeswitch

这对我们日常捕获之日很重要

3、share 目录

1、自定义脚本存储位置

share/freeswitch/scripts

2、自定义声音文件

share/freeswitch/sounds

4、etc目录

freeswitch.xml(初始化配置)

路径:etc/freeswitch/vars.xml

引入配置的初始化配置

vars.xml(全局配置)

全局变量配置

日志级别:
# 例如设置日志级别debug
<!-- various debug and defaults -->
<X-PRE-PROCESS cmd="set" data="call_debug=false"/> 
# debug模式
<X-PRE-PROCESS cmd="set" data="console_loglevel=debug"/> 
# info 模式
<X-PRE-PROCESS cmd="set" data="console_loglevel=info"/> 
声音文件:

二、基础性安装

①需要用root权限安装,涉及一些高权限的问题

②需要yum命令及外网访问权限

0)默认性设置

1、默认部署目录

/opt/freeswitch/setup

2、默认最低版本

freeswitch-1.6.20.tar.gz

公网地址:http://files.freeswitch.org/freeswitch-releases/?C=M;O=D

3、声音文件相关依赖包地址

公网地址(无需翻墙即可):http://files.freeswitch.org/releases/sounds/

常用语音包如下:(常用us、zh、hk、music)

Tips: 这里主要以截止时间为2021.9.16的最新版本记录

语言包
国家地区方言精度呼叫人名版本
enus8000callie/allison1.0.52/1.0.1
enus16000callie/allison1.0.52/1.0.1
enus32000callie/allison1.0.52/1.0.1
enus48000callie/allison1.0.52/1.0.1
zhhk8000sinmei1.0.51
zhhk16000sinmei1.0.51
zhhk32000sinmei1.0.51
zhhk48000sinmei1.0.51
zhcn8000sinmei1.0.51
zhcn16000sinmei1.0.51
zhcn32000sinmei1.0.51
zhcn48000sinmei1.0.51
音乐包
精度版本
80001.0.52
160001.0.52
320001.0.52
480001.0.52

4、默认MRCP协议

媒体资源控制协议(Media Resource Control Protocol)

默认采取V2版本的MRCP协议也就是SIP控制协议

Tips:目前存在两种版本,版本2使用SIP作为控制协议,版本1使用RTSP控制协议

5、语音编码

带宽计算占用
带宽=包长度×每秒包数
       =包长度×(1/打包周期)
       =(Ethernet头+IP头+UDP头+RTP头+有效载荷)×(1/打包周期)
       =(208bit +160bit+64bit+96bit +有效载荷)×(1/打包周期)
       =(528bit+(打包周期(秒)×每秒的比特数))×(1/打包周期)
       =( 528 / 打包周期 ) + 每秒比特数

常规编码表

G723: 24byte(6.3k/s)、20byte(5.3k/s)

name of encoding sample/framesamplie/framedefault ratems/framems/packetsampling
DVI4sample420var.
G711(a/u)sample642016000
G722sample82016000
G723frameN/A30308000
G728frameN/A2.5208000
G729(a/b)frameN/A10208000
PCMUsample820var.
PCMAsample820var.
# 结合编码表计算
G711:20ms打包,带宽为 ( 528/20 + 64) Kbit/s=90.4 Kbit/s

G729:20ms打包,带宽为 ( 528/20 + 8 ) Kbit/s= 34.4 Kbit/s

G723:5.3k,30ms打包,带宽为 ( 528/30 + 5.3 ) Kbit/s=22.9 Kbit/s

1)依赖包安装

yum install -y git gcc-c++ wget alsa-lib-devel autoconf automake bison bzip2 curl-devel e2fsprogs-devel flite-devel gdbm-devel gnutls-devel ldns-devel libcurl-devel libedit-devel libidn-devel libjpeg-devel libmemcached-devel libogg-devel libsndfile-devel libtiff-devel libtheora-devel libtool libvorbis-devel libxml2-devel lua-devel lzo-devel ncurses-devel net-snmp-devel openssl-devel opus-devel pcre-devel perl perl-ExtUtils-Embed pkgconfig postgresql-devel python-devel soundtouch-devel speex-devel sqlite-devel unbound-devel unixODBC-devel libuuid-devel which zlib-devel net-tools libvpx libvpx-devel yasm

2)部署目录

mkdir -p /opt/freeswitch/setup

tip: p参数是递归创建目录,即使上级目录不存在,会按目录层级自动创建目录

1、布置安装包

一般建议1.6大版本内,次版本号以双数为稳定版

放置到部署目录内 /opt/freeswitch/setup

2、部署安装

进入目录解压

tar -xvf ./freeswitch-1.6.20.tar.gz

配置安装地址并且编译安装

Tips: 如果想偷懒可以先直接参照第4步才进行安装

cd /opt/freeswitch/setup/freeswitch-1.6.20
# 配置安装前缀
./configure --prefix=/opt/freeswitch/freeswitch-1.6.20
# 编译安装
make & make install

3、声音文件安装

freeswitch 需要语音包以支持音頻播放,若缺失这部分会导致拨号时直接挂断的问题

进入声音文件目录: /opt/freeswitch/setup/freeswitch-1.6.20/share/freeswitch/sounds

自定义安装语音:

建议为每个语言单独建立一个父目录以适合配置

根据需要,依次下载所有精度的语音包

例如:hk语言:

#48000 精度
wget http://files.freeswitch.org/releases/sounds/freeswitch-sounds-zh-hk-sinmei-48000-1.0.51.tar.gz
#32000 精度
wget http://files.freeswitch.org/releases/sounds/freeswitch-sounds-zh-hk-sinmei-32000-1.0.51.tar.gz
#16000 精度
wget http://files.freeswitch.org/releases/sounds/freeswitch-sounds-zh-hk-sinmei-16000-1.0.51.tar.gz
#8000 精度
wget http://files.freeswitch.org/releases/sounds/freeswitch-sounds-zh-hk-sinmei-8000-1.0.51.tar.gz

# 四个精度在同一个文件夹下解压,会自适应合并
tar -xvf freeswitch-sounds-zh-hk-sinmei-48000-1.0.51.tar.gz
tar -xvf freeswitch-sounds-zh-hk-sinmei-32000-1.0.51.tar.gz
tar -xvf freeswitch-sounds-zh-hk-sinmei-16000-1.0.51.tar.gz
tar -xvf freeswitch-sounds-zh-hk-sinmei-8000-1.0.51.tar.gz
自动安装语音文件:
#进入源代码目录中执行
cd /opt/freeswitch/setup/freeswitch-1.6.20
#下列录音文件中可选择其一

#安装低精度录音文件
make sounds-install
make moh-install

#安装高清录音文件
make cd-sounds-install
make cd-moh-install

4、安装MRCP协议模块

这边采用V2版本也就是基于SIP控制协议

#进入源代码目录
cd /opt/freeswitch/setup/freeswitch-1.6.20

#编辑模块配置 modules.conf
# 开放 asr_tts/mod_unimrcp 注释

make mod_unimrcp-install

5、配置安装的语音文件

1、配置加载语言

/opt/freeswitch/etc/freeswitch

可采取方式有两种:①freeswitch.xmlvars.xml

Tips:最终vars.xm也是会被freeswitch加载的

vars.xml加载
# 英文加载
# en/us/callie 为sound目录下直接解压的主目录
<X-PRE-PROCESS cmd="set" data="sound_prefix=$${sounds_dir}/en/us/callie"/>

# 中文加载
# zh/cn/link 为sound目录下直接解压的主目录
<X-PRE-PROCESS cmd="set" data="sound_prefix=$${sounds_dir}/zh/cn/link"/>
freeswitch.xml加载
#开启中文、英文
<section name="languages" description="Language Management">
    <X-PRE-PROCESS cmd="include" data="lang/zh/*.xml"/> 
    <X-PRE-PROCESS cmd="include" data="lang/en/*.xml"/>
</section>

#这里配置需要对应
开放的内容参考 `modules.conf.xml` 模块开放语言,编译
例如:
say/mod_say_zh #模块注释
#安装模块,即可安装模块
make mod_say_zh-install
2、配置媒体编码支持

实际上需要两端编码共同支持才能正常呼叫成功并解码编码

兼容性编码
#注释默认值
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=OPUS,G722,PCMU,PCMA,VP8"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=OPUS,G722,PCMU,PCMA,VP8"/>
#切换为,主要是使用G711算法支持媒体提升兼容性
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=OPUS,G711,PCMU,PCMA,VP8"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=OPUS,G711,PCMU,PCMA,VP8"/>
协商编码策略

编码协商问题:https://blog.csdn.net/yetyongjin/article/details/88848897

#混频处理,FS自动转换
<X-PRE-PROCESS cmd="set" data="media_mix_inbound_outbound_codecs=true"/>

6、ACL访问控制配置

/opt/freeswitch/etc/freeswitch/autoload_configs/acl.conf.xml

可以自定义访问控制

#例如创建一个列表 `my_acl` 
# 允许:127.0.0.1/32
# 禁止:172.16.2.103/20
# 下列用到的FreeSwitch的ip
<list name="my_acl" default="deny">
    <node type="allow" domain="$${domain}"/>  
    <node type="allow" cidr="127.0.0.1/32" />
    <node type="deny" cidr="172.16.2.103/20"/>
    <node type="deny" cidr="172.16.2.106/20"/>
</list>
客户端访问配置

以socket的形式,对外提供控制FS一种途径,使得可以用fs_cli访问FS

外呼使用inbound模式,默认不修改是RFC2833

编辑/opt/freeswitch/etc/freeswitch/autoload_configs/event_socket.conf.xml

<configuration name="event_socket.conf" description="Socket Client">
  <settings>
    <param name="nat-map" value="false"/>
      <!-- 配置任意网络可访问 -->
    <param name="listen-ip" value="0.0.0.0"/> 
    <param name="listen-port" value="8021"/>
     <!-- 自定义密码 -->
    <param name="password" value="ClueCon"/>
    <!-- 使用定义的ACL配置:acl -->
    <param name="apply-inbound-acl" value="my_acl"/>
  </settings>
</configuration>

7、DTMF模式选择

①使用2833模式外呼

默认就是2833模式,通常要支持101携带数字

#freeswitch/etc/freeswitch/sip_profile/internal.xml、extranal.xml
<param name="rfc2833-pt" value="101"/>
②使用inbound模式外呼
#DTMF(双音多频)定义:由高频音和低频音的两个正弦波合成表示数字按键(0~9 * # A B C D)。

(1)SIPINFO (带外检测方式)
(2)RFC2833 (带内检测方式)
(3)INBAND (带内检测方式)

在选择压缩比很高码率很低的codec,比如G.723.1和G.729A等,建议不要使用INBAND模式,因为INBAND DTMF数据在进行复杂编解码后会产生失真,造成DTMF检测发生偏差或失败

freeswitch/etc/freeswitch/sip_profile/internal.xml 、extranal.xml

#默认为RFC2833
<param name="dtmf-type" value="inband"/>
# 关闭101,若开启这个配置,会自动转为2833
<param name="rfc2833-pt" value="101"/>
③sipInfo模式外呼

freeswitch/etc/freeswitch/sip_profile/internal.xml、extranal.xml

#默认为RFC2833
<param name="dtmf-type" value="info"/>
# 关闭101,若开启这个配置,会自动转为2833
<param name="rfc2833-pt" value="101"/>
sdp携带数字检测

寻找参数: send * bytes to udp

接着寻找:INVITE

   m=audio 16724 RTP/AVP 0 8 3 101    # 这里包含了数字 0、8、3、101

   a=rtpmap:0 PCMU/8000

   a=rtpmap:8 PCMA/8000

   a=rtpmap:3 GSM/8000

   a=rtpmap:101 telephone-event/8000 # 101

   a=fmtp:101 0-16 #101

   a=ptime:20

8、使用第三方mrcp模块(可选)

主要针对/opt/freeswitch/etc/freeswitch/autoload_configs/unimrcp.conf.xml修改

阿里模块

/opt/freeswitch/etc/freeswitch/autoload_configs/unimrcp.conf.xml修改

<configuration name="unimrcp.conf" description="UniMRCP Client">
    <settings>
        <!-- 配置tts与asr模块配置 -->
        <param name="default-tts-profile" value="ali-unimrcp"/>
        <param name="default-asr-profile" value="ali-unimrcp"/>
    </settings>
      <!-- 配置阿里mrcp配置 start -->
  	  <!-- 放置在autoload_configs同级目录 -->
    <profiles>
	    <X-PRE-PROCESS cmd="include" data="../mrcp_profiles/*.xml"/>
    </profiles>
      <!-- 配置阿里mrcp配置 end-->
</configuration>
1、ali-unimrcp.xml

/opt/freeswitch/etc/freeswitch/mrcp_profiles下新建ali-unimrcp.xml

阿里语音IP: 172.16.7.80

freeswitchIP: 172.16.2.103 #具体设置可以在第六步完成【ACL访问控制配置】

<include>
  <profile name="ali-unimrcp" version="2">
      <param name="server-ip" value="阿里语音的IP"/>
      <!-- server-port:阿里语音端口 -->
      <param name="server-port" value="7010"/>
      <param name="client-ip" value="freeswitchIP"/>
      <!-- client-port:客户端服务器端口 -->
      <param name="client-port" value="9988"/> 
      <param name="sip-transport" value="tcp"/>
      <!-- ua-name:代理服务器名称 -->
      <param name="ua-name" value="Freeswitch"/>
      <!-- sdp-origin:呼叫终端源头 -->
      <param name="sdp-origin" value="Freeswitch"/>
      <!-- rtp-ip:代理服务器IP -->
      <param name="rtp-ip" value="freeswitchIP"/>
      <param name="rtp-port-min" value="4240"/>
      <param name="rtp-port-max" value="4259"/>
      <param name="codecs" value="L16/96/8000"/>
  </profile>
</include>
2、网关配置

配置:/opt/freeswitch/etc/freeswitch/sip_profiles/external

例如自定义网关配置名称: ringo.xml

from-domain: 192.167.34.212 #允许进入的地址,若不设置则不限制

proxy: 192.168.21.13:5082 # 电话网关地址和端口

<gateway name="ringo">
      <param name="username" value="none"/>
      <param name="password" value="none"/>
      <param name="caller-id-in-from" value="true"/>
      <!-- proxy:电话网关地址和端口 -->
      <param name="proxy" value="192.168.21.13:5082"/>
      <param name="register" value="false"/>
   	  <!-- from-domain:可以不设置,等于可以允许任意domain访问 -->
      <param name="from-domain" value="180.167.34.212"/>
</gateway>

3)启动相关检测

①启动/停止freeswitch

# 启动
/opt/freeswitch/bin/freeswitch -nc
# 停止
/opt/freeswitch/bin/freeswitch -stop 

②查看端口是否启动

netstat -nlpt

③登录/退出freeswitch

登录freeswitch,具体若访问不了,参考【7、inbound模式配置】

#登入freeswitch
/opt/freeswitch/bin/fs_cli -H127.0.0.1 -pClueCon -P8021
#退出freeswitch
输入/bye退出freeswitch登录

④网关状态

sofia status
#查看external:ringo
对应地址为设置地址

⑤验证电话

#vos开启透传后,输入显示号码:0755811111
# 约定显示透传号码:0755811111
# 测试手机号码:15111111117
originate  {origination_caller_id_number=0755811111}sofia/gateway/ringo/15111111117 &echo

4)抓包检测

#网卡名称:ens192
tcpdump -i  ens192 -W ./freeswitch.cap

5)开启SIP日志跟踪

在fs_cli 控制界面上输入命令:

开启sip消息显示: sofia global siptrace on

关闭sip消息显示: sofia global siptrace off
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值