FreeSWITCH

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

2.安装环境以及依赖

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

 1.源码安装 包:github获取FreeSWITCH官网下载本人蓝奏云并解压
  1. [root@king src]# pwd
  2. /usr/local/src
  3. [root@king src]# ll
  4. -rw-r--r-- 1 root root 59842116 Dec 12 09:48 freeswitch-1.6.zip
  5. 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,为了便于使用,建议将这两个命令做符号链接放到你的搜索路径中,如:
  1. ln -sf /usr/local/freeswitch/bin/freeswitch /usr/bin/
  2. 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执行)
查看编码:
  1. freeswitch@FreeSWITCH> show codec
  2. type,name,ikey
  3. codec,ADPCM (IMA),mod_spandsp
  4. codec,AMR,mod_amr
  5. codec,B64 (STANDARD),mod_b64
  6. codec,G.722,mod_spandsp
  7. codec,G.723.1 6.3k,mod_g723_1
  8. codec,G.726 16k,mod_spandsp
  9. codec,G.726 16k (AAL2),mod_spandsp
  10. codec,G.726 24k,mod_spandsp
  11. codec,G.726 24k (AAL2),mod_spandsp
  12. codec,G.726 32k,mod_spandsp
  13. codec,G.726 32k (AAL2),mod_spandsp
  14. codec,G.726 40k,mod_spandsp
  15. codec,G.726 40k (AAL2),mod_spandsp
  16. codec,G.729,mod_g729
  17. codec,GSM,mod_spandsp
  18. codec,LPC-10,mod_spandsp
  19. codec,OPUS (STANDARD),mod_opus
  20.  
  21. 17 total. 
freeswitch@FreeSWITCH>
查看系统的运行状态:
  1. freeswitch@FreeSWITCH> status
  2. UP 0 years, 0 days, 0 hours, 3 minutes, 21 seconds, 118 milliseconds, 975 microseconds
  3. FreeSWITCH (Version 1.6.20 64bit) is ready
  4. 3 session(s) since startup
  5. 0 session(s) - peak 1, last 5min 1
  6. 0 session(s) per Sec out of max 30, peak 1, last 5min 1
  7. 1000 session(s) max
  8. min idle cpu 0.00/97.47
  9. Current Stack Size/Max 240K/8192K
  10.  
  11. freeswitch@king>
查看注册:
  1. freeswitch@FreeSWITCH> sofia status profile internal reg
  2.  
  3. Registrations:
  4.  
  5. Call-ID: 101919ZDFhZDNhNDZmMTUwZTc5NTUzNjM2ZWIxNjI3NWQ1NGQ
  6. User: 1001@172.17.0.8
  7. Contact: "1001" <sip:1001@60.177.98.xx:61514;rinstance=147853e260e28850>
  8. Agent: X-Lite release 5.8.0 stamp 101919
  9. Status: Registered(UDP)(unknown) EXP(2019-12-12 16:39:07) EXPSECS(3572)
  10. Ping-Status: Reachable
  11. Ping-Time: 0.00
  12. Host: king
  13. IP: 60.177.98.xx
  14. Port: 61514
  15. Auth-User: 1001
  16. Auth-Realm: 172.17.0.8
  17. MWI-Account: 1001@172.17.0.8
  18.  
  19. 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
禁用方式,在主目录执行
 
  1. mv conf/sip_profiles/internal-ipv6.xml conf/sip_profiles/internal-ipv6.xml.bk
  2. 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]

编辑

  1. 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. 2017-2018 ACM-ICPC Northern Eurasia(A.Archery Tournament)

    题目链接:https://vjudge.net/problem/Gym-101630A 题意: n个事件,t=1 代表增加一个圆心为(x,y),半径为 abs(y)的靶子,t=2,代表射击的坐标为(x ...

  2. 实现FTP+PAM+MySQL环境,批量配置虚拟用户

    实现FTP+PAM+MySQL环境,批量配置虚拟用户 搭建环境: CentOS6.5或CentOS6.7 [root@vhost3 ~]# uname -a Linux vhost3 2.6.32-5 ...

  3. 学习笔记-vue hash模式打包

    1.打包设置config->index.js 2.图片资源路径出现问题 设置下utils.js文件

  4. AgileConfig - 轻量级配置中心1.2.0发布,全新的UI✨✨✨

    AgileConfig自发布以来有个"大问题"-UI太丑.因为当初这个项目是给自己用的,连UI界面都没有,全靠手动在数据库里改配置.后来匆匆忙忙使用bootstrap3简单的码了一 ...

  5. Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件

    带下拉选项的输入框 (Textbox with Dropdown) 是既允许用户从下拉列表中选择输入又允许用户自由键入输入值.这算是比较常见的一种 UI 元素,可以为用户提供候选项节省操作时间,也可以 ...

  6. Python简单实现杨辉三角

    n=input("请输入要打印的行数")n=int(n)for x in range(0,n+1): p=1 print(''.rjust(n-x),end="" ...

  7. 【笔记】《Redis设计与实现》chapter10 RDB持久化

    chapter10 RDB持久化 10.1 RDB文件的创建和载入 有两个Redis命令可以用于生成RDB文件,SAVE和BGSAVE SAVE阻塞服务器进程进行RDB文件的创建,BGSAVE则创建服 ...

  8. 击鼓传花联想到了Java设计模式:责任链模式

    目录 应用场景 简单示例 责任链模式 定义 意图 主要解决问题 何时使用 优缺点 击鼓传花的故事 应用场景 http web请求处理,请求过来后将经过转码.解析.参数封装.鉴权等一系列的处理(责任), ...

  9. 号外号外!DevUI Admin V1.0 发布啦!

    4月是鸟儿的月份,是木棉花的月份,是 DevUI Admin 发布的月份. 广受大家期待的 DevUI Admin 终于迎来了第一个开源 Angular 版本! DevUI Admin 是一个企业级中 ...

  10. hdu 2841 Visible Trees(容斥)

    原文链接 There are many trees forming a m * n grid, the grid starts from (1,1). Farmer Sherlock is stand ...