FreeSWITCH

FreeSWITCH的是一个跨平台的开源电话交换平台
环境:
[root@cen ~]# cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)
安装:
1.准备好FreeSWITCH安装包(我用的1.6版本),

2.安装环境以及依赖

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

 1.源码安装 包:github获取FreeSWITCH官网下载本人蓝奏云并解压
[root@king src]# pwd
/usr/local/src
[root@king src]# ll
-rw-r--r-- 1 root root 59842116 Dec 12 09:48 freeswitch-1.6.zip
drwxr-xr-x 24 root root 20480 Dec 12 12:25 freeswitch-1.6
2.安装依赖环境:
 
yum install -y git alsa-lib-devel autoconf automake bison broadvoice-devel bzip2 curl-devel libdb4-devel e2fsprogs-devel erlang 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 python-devel python-devel soundtouch-devel speex-devel sqlite-devel unbound-devel unixODBC-devel wget which yasm zlib-devel libshout-devel libmpg123-devel lame-devel
 
编译安装:
进入解压目录
执行bootstrap.sh
再继续执行编译安装
  1. ./configure(此过程出现众多未知错误,一般是依赖包没装,百度一堆)
  2. make(make时 出现错误我遇到的处理方法在下下下面)
  3. make install
安装结果部分截图:
至此,FreeSWITCH就已经安装完了。在CentOS系统上,其默认的安装位置是/usr/local/freeswitch。两个常用的命令是bin/freeswitch和bin/fs_cli,为了便于使用,建议将这两个命令做符号链接放到你的搜索路径中,如:
ln -sf /usr/local/freeswitch/bin/freeswitch /usr/bin/
ln -sf /usr/local/freeswitch/bin/fs_cli /usr/bin/
目录结构:
bin
可执行程序
certs
 
conf**
配置文件
db
系统sqlite数据库.将呼叫信息存放到数据库,在查询时无需对核心数据结构加锁
fonts
 
grammar
语法,适用于ASR
htdocs
HTTP Web Server根目录
images
 
include
头文件
lib
库文件
log
日志
mod
可加载模块目录
recordings
录音
run
pid
scripts
嵌入式语言写入的脚本,
sounds
声音文件
storage
语音留言的录音(Voicemail)

配置文件:

由许多xml组成,
文件夹
描述
autoload_configs
这些配置文件会在系统启动时自动加载到FreeSWITCH中,它们包含几乎所有核心模块的配置信息。文件一般以“模块”.conf.xml称
dialplan**
设置拨号计划的地方。包括一些有关如何配置拨号计划的示例。
directory**
该目录包含所有可能注册并将freeswitch用作其PBX的用户。默认有1000-1019 20个用户
jingle_profiles
Jingle是FS用于处理XMPP的mod。配置文件告诉FS如何使用该协议。每个配置文件都有其自己的IP端口。
lang
语言
mrcp_profiles
MRCP用于允许FreeSWITCH使用语音识别和TTS
sip_profiles
告诉FS如何交谈。每个配置文件都有其自己的端口。
ivr_menus
存放了一些默认的IVR
 
配置文件
描述
freeswitch.xml**
将所有的xml配置文件“粘”在一起
vars.xml
定义全局变量

more

安装声音文件
make cd-sounds-install
make cd-moh-install
FreeSWITCH 安装后,默认配置了20个用户(1000-1019),密码 1234,同时包含了一个功能齐全的 IVR 示例,随便使用一个分机号登陆服务器,拨5000,就可以听到菜单提示了。
启动
# 可以看到详细启动日志,启动后进入控制台模式,退出使用shutdown
freeswitch -c -nonat -rp
# 默认后台运行
freeswitch -nc ***
# 生成环境后台运行
freeswitch -rp -nc -nonat
# 关闭
freeswitch -stop ***
#进入后台:
fs_cli(直接执行,如果你创建软链接,没有创建需要到bin目录找到fs_cli执行)
查看编码:
freeswitch@FreeSWITCH> show codec
type,name,ikey
codec,ADPCM (IMA),mod_spandsp
codec,AMR,mod_amr
codec,B64 (STANDARD),mod_b64
codec,G.722,mod_spandsp
codec,G.723.1 6.3k,mod_g723_1
codec,G.726 16k,mod_spandsp
codec,G.726 16k (AAL2),mod_spandsp
codec,G.726 24k,mod_spandsp
codec,G.726 24k (AAL2),mod_spandsp
codec,G.726 32k,mod_spandsp
codec,G.726 32k (AAL2),mod_spandsp
codec,G.726 40k,mod_spandsp
codec,G.726 40k (AAL2),mod_spandsp
codec,G.729,mod_g729
codec,GSM,mod_spandsp
codec,LPC-10,mod_spandsp
codec,OPUS (STANDARD),mod_opus 17 total. 
freeswitch@FreeSWITCH>
查看系统的运行状态:
freeswitch@FreeSWITCH> status
UP 0 years, 0 days, 0 hours, 3 minutes, 21 seconds, 118 milliseconds, 975 microseconds
FreeSWITCH (Version 1.6.20 64bit) is ready
3 session(s) since startup
0 session(s) - peak 1, last 5min 1
0 session(s) per Sec out of max 30, peak 1, last 5min 1
1000 session(s) max
min idle cpu 0.00/97.47
Current Stack Size/Max 240K/8192K freeswitch@king>
查看注册:
freeswitch@FreeSWITCH> sofia status profile internal reg

Registrations:

Call-ID: 101919ZDFhZDNhNDZmMTUwZTc5NTUzNjM2ZWIxNjI3NWQ1NGQ
User: 1001@172.17.0.8
Contact: "1001" <sip:1001@60.177.98.xx:61514;rinstance=147853e260e28850>
Agent: X-Lite release 5.8.0 stamp 101919
Status: Registered(UDP)(unknown) EXP(2019-12-12 16:39:07) EXPSECS(3572)
Ping-Status: Reachable
Ping-Time: 0.00
Host: king
IP: 60.177.98.xx
Port: 61514
Auth-User: 1001
Auth-Realm: 172.17.0.8
MWI-Account: 1001@172.17.0.8 Total items returned: 1
 
# 查看用户是否注册
sofia status profile internal reg 1000
 
# 呼叫电话,接通后park
originate user/1000 &park
 
# 切断电话
fsctl hupall normal_clearing dialed_ext 1000
 
# 呼叫电话,接通后播放音乐
originate user/1000 &playback(/tmp/music.wav)
 
# 查看当前通话数
show calls
 
freeswitch@FreeSWITCH> show calls
uuid,direction,created,created_epoch,name,state,cid_name,cid_num,ip_addr,dest,presence_id,presence_data,accountcode,callstate,callee_name,callee_num,callee_direction,call_uuid,hostname,sent_callee_name,sent_callee_num,b_uuid,b_direction,b_created,b_created_epoch,b_name,b_state,b_cid_name,b_cid_num,b_ip_addr,b_dest,b_presence_id,b_presence_data,b_accountcode,b_callstate,b_callee_name,b_callee_num,b_callee_direction,b_sent_callee_name,b_sent_callee_num,call_created_epoch
313cad28-e1eb-4ea6-910a-90d112e19655,inbound,2019-12-12 15:45:32,1576136732,sofia/internal/1003@118.89.69.x:5060,CS_EXECUTE,1003,1003,60.177.xx.241,1001,1003@118.89.69.xx,,1003,ACTIVE,,,,313cad28-e1eb-4ea6-910a-90d112e19655,king,,,e9caa3c1-ba32-4d79-b1e1-4f62b2bc2e44,outbound,2019-12-12 15:45:42,1576136742,sofia/internal/1001@60.177.98.xxx:61514,CS_EXCHANGE_MEDIA,Extension 1003,1003,60.xxx.98.241,1001,1001@172.17.0.8,,,ACTIVE,Outbound Call,1001,,,,1576136747
 
1 total.
------------
# 查看当前通道数

show channels

配置Freeswitch新增用户

1.添加用户
默认用户在/usr/local/freeswitch/conf/directory/default/下
2.修改拨号计划(Dialplan)使其他用户可以呼叫它(默认只能打不能接)
/usr/local/freeswitch/conf/dialplan/ default.xml
 
<extension name="Local_Extension">
 
<condition field="destination_number" expression="^(10[01][0-9]|1020|1021)$">
3.在后台重新加载配置文件
freeswitch@FreeSWITCH> reloadxml

启动

# 可以查看到详细的日志信息
freeswitch -c -nonat -rp
 
# 默认后台运行
freeswitch -nc
 
# 生成环境后台运行
freeswitch -rp -nc -nonat
#####
软件电话
X-Lite
#####
Zoiper
模块的安装
源码目录下make mod_xxx-install命令,这样就编译相应模块,并把编译后的动态库安装的/usr/local/freeswitch/mod目录下了。
给1000打电话
originate user/1000 &echo
报错:
正常情况下,直接输入 bin/fs_cli 即可连接上,并出现系统提示符。如果出现:
[ERROR] libs/esl/fs_cli.c:652 main() Error Connecting [Socket Connection Error]
这样的错误,说明 FreeSWITCH 没有启动或 mod_event_socket 没有正确加载,请检查TCP端口8021端口是否处于监听状态或被其它进程占用。(重启报错消失)
fs_cli 连接不了本机的 freeswitch 检查配置文件下的 autoload_config/event_socket.conf.xml 中的 ip,密码等信息,以及查看默认 的 8021 端口是否启动 机 查看本机 freeswitch 的运行状态
=======================================================================================
错误合集
make时出现的错误: making all mod_signalwire make[4]: Entering directory /usr/local/src/freeswitch/src/mod/applications/mod_signalwire' Makefile:916: *** You must install libks to build mod_signalwire. Stop. make[4]: Leaving directory/usr/local/src/freeswitch/src/mod/applications/mod_signalwire' make[3]: *** [mod_signalwire-all] Error 1 根据报错可以看出需要安装需要安装 libks 和 signalwire-c,安装libks前需要先安装cmake
安装cmake
yum remove cmake #卸载yum安装的版本,若无安装则忽略
cd /usr/local/src
tar vzxf cmake-3.14.0.tar.gz
cd cmake-3.14.0
./configure
make
make install
ln -s /usr/local/bin/cmake /usr/bin #软连接
安装libks
cd /usr/local/src
yum install libatomic
cd libks
cmake .
make
make install
安装signalwire-c
cd /usr/local/src
cd signalwire-c/
cmake .
make
make install
 
ln -sf /usr/local/lib64/pkgconfig/signalwire_client.pc /usr/lib64/pkgconfig/signalwire_client.pc
最后再次安装FreeSWITCH
make && make install
-------------------------------------------------------------------
Freeswitch 的日志上就会出现相关的 debug,notice 等信息。 如遇到红色的报警,并提示要 sleep 10 秒的,则是由于我们使用了默认密码,可以修改 Conf/vars.xml 中的 <X-PRE-PROCESS cmd="set" data="default_password=1234"/> 或修改 conf/dialplan/default.xml 中 <condition field="${default_password}" expression="^1234$" break="never"> <action application="log" data="CRIT WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING "/> <action application="log" data="CRIT Open $${conf_dir}/vars.xml and change the default_password."/> <action application="log" data="CRIT Once changed type 'reloadxml' at the console."/> <action application="log" data="CRIT WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING "/> <action application="sleep" data="10000"/> </condition>
 ----------------------------------------------------------------------------------------------------------------------
启动freeswitch报错:
[ERR] sofia.c:3146 Error Creating SIP UA for profile: external-ipv6 
[ERR] sofia.c:3146 Error Creating SIP UA for profile: internal-ipv6
处理:禁用ipv6,如果系统不支持,可能会刷如上错误信息,禁用即可 。。查找来自https://www.cnblogs.com/lmsthoughts/p/9322816.html
禁用方式,在主目录执行
 
mv conf/sip_profiles/internal-ipv6.xml conf/sip_profiles/internal-ipv6.xml.bk
mv conf/sip_profiles/external-ipv6.xml conf/sip_profiles/external-ipv6.xml.bk
重新启动就没有了呵呵
----------------------------------------------------------------------------------
使用fs_cli启动报错
处理报错:[ERROR] fs_cli.c:1659 main() Error Connecting [Socket Connection Error]

编辑

vim /usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml

重启FreeSWITCH

fs_cli -H IP -P 8021 -p ****(密码)

++====================================================================
配置录音功能
1.创建录音存储文件夹
2.修改配置文件
3.使配置文件生效
4.测试结果
    1.建立一个文件夹,在/freeswitch/recordings/archive/ ,用来存储录音文件;
    2.修改拨码计划,打开 \conf\dialplan\default.xml
                     找到下面的语句:
<extension name="Local_Extension">    
                           <condition field="destination_number" expression="^(10[01][0-8])$">    
    在下面添加录音配置参数:
<action application="set" data="RECORD_TITLE=Recording ${destination_number} ${caller_id_number} ${strftime(%Y-%m-%d %H:%M)}"/>  
                      <action application="set" data="RECORD_COPYRIGHT=(c) 2011"/>  
                      <action application="set" data="RECORD_SOFTWARE=FreeSWITCH"/>
                      <action application="set" data="RECORD_ARTIST=FreeSWITCH"/>
                      <action application="set" data="RECORD_COMMENT=FreeSWITCH"/>
                      <action application="set" data="RECORD_DATE=${strftime(%Y-%m-%d %H:%M)}"/>  
                      <action application="set" data="RECORD_STEREO=true"/>
     <action application="record_session" data="$${base_dir}/recordings/archive/${strftime(%Y-%m-%d-%H-%M-%S)}_${destination_number}_${caller_id_number}.wav"/>
3.在fs_cli中使用F6或执行reloadxml使配置文件生效;
4.随便呼叫产生录音文件

FreeSWITCH 架构

FreeSWITCH 的扩展性非常强
 

FreeSWITCH的安装与使用的更多相关文章

  1. freeswitch编译安装,初探, 以及联合sipgateway, webrtc server的使用场景。

    本文主要记录freeswitch学习过程. 一 安装freeswitch NOTE 以下两种安装方式,再安装的过程中遇到了不少问题,印象比较深刻的就是lua库找到不到这个问题.这个问题发生在make ...

  2. Freeswitch 各版本一键安装脚本 Freeswitch 快速安装 G729编解码库

    最近有时间整理,写了freeswitch的一键安装包分享一下,里面带有 mysql=0 是否选择安装mysql. 其他提示:脚本里面集成了安装g729脚本,支持录音.转码的bcg729脚本. 1.下载 ...

  3. 64位FreeSWITCH编译安装(版本1.4.20)

    1.安装64位的CentOS6.5操作系统(勾选的服务器版本安装). 2.下载FreeSWITCH安装包以及关联的lib库.下载地址http://files.freeswitch.org/downlo ...

  4. freeSWITCH之安装

    freeSWITCH 安装 官网教程 https://freeswitch.org/confluence/display/FREESWITCH/FreeSWITCH+First+Steps Windo ...

  5. freeswitch 编译安装后的配置

    --------------------FreeSWITCH configuration------------Locations: prefix: /usr/local/freeswitchexec ...

  6. freeswitch编译安装依赖

    ncurses:提供字符界面 zlib:数据压缩 libjpeg:JPEG图片格式数据的解码/编码/其他. lua:lua解释器 libedit:一种编辑操作的库,对一些可以交互操作的场景,或转为了自 ...

  7. Centos 6 安装FreeSWITCH

    为了安装FreeSWITCH ,我选择的Linux是CentOS,目前最新的Centos版本是6.具体安装CentOS的是步骤详见网上的其它资料,本节的主要目的是为了记录FreeSWITCH的安装过程 ...

  8. Freeswitch 安装爬坑记录1

    2 Freeswitch的安装 2.1 准备工作 服务器安装CentOS 因为是内部环境,可以关闭一些防火墙设置,保证不会因为网络限制而不能连接 关闭防火墙 查看防火墙 systemctl statu ...

  9. CentOS 5下freeswitch中集成使用ekho实现TTS功能三

    四:在freeswitch中调用ekho 注:在测试过程中该语音包好像没用 FreeSWITCH 中文语音包测试版fssounds.zip 在/usr/local/freeswitch/sounds/ ...

随机推荐

  1. ch2_8_3求解回文序列问题(递归实现)

    思路:回文序列中左右两边的值一定相等,所以可以将该问题分解为两边化为相同元素操作的次数和去掉两边相等元素后后剩下元素变成回文序列的操作次数. 题目: 如果一个数字序列逆置之后跟原序列是一样的就称这样的 ...

  2. C语言数组寻址

    C语言数组 数组的定义 数组是用来存放数据类型相同且逻辑意义相同的数据 数组的大小 数组的大小不能是变量,必须是常量或者常量表达式,常量表达式由编译器编译时自动求值. 也可以不指定数组大小,但必须对数 ...

  3. 全网最详细的Linux命令系列-rm命令

    今天学习一下linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除 ...

  4. [Azure Devops] 获取单元测试的代码覆盖率

    1. 获取代码覆盖率 上一篇文章里,我们在 Pipeline 中插入一个单元测试并把所有单元测试都通过作为 Pipeline 通过的硬性要求.除此以外,我们还可以获取单元测试的代码覆盖率,用作衡量代码 ...

  5. 03_利用pytorch解决线性回归问题

    03_利用pytorch解决线性回归问题 目录 一.引言 二.利用torch解决线性回归问题 2.1 定义x和y 2.2 自定制线性回归模型类 2.3 指定gpu或者cpu 2.4 设置参数 2.5 ...

  6. JVM--Java核心面试知识整理(一)

    JVM 基本概念 JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈. 一个垃圾回收,堆和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的交互 ...

  7. java面试一日一题:mysql中常用的存储引擎有哪些?

    问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...

  8. 在Visual Studio 中使用git——什么是Git(一)

    写程序必然需要版本控制,哪怕是个人项目也是必须的,微软从Visual Studio 2019开始默认提供了对Git的支持,Visual Studio 2019之前的版本可以安装相应的插件来实现Git功 ...

  9. 2021年HW0day-奇安信 网康下一代防火墙 RCE漏洞细节

    漏洞信息: 漏洞名称:奇安信 网康下一代防火墙 RCE漏洞. 漏洞性质:远程命令执行 漏洞利用特点:命令执行之后没有回显 利用方式:防火墙使用linux进行开发的,可以使用echo xxx >1 ...

  10. kubernetes CRD

    官方文档:https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions ...