Ubuntu20.04 下编译和运行 FreeSWITCH的问题汇总
1. Ubuntu20.04 下编译和运行 FreeSWITCH的问题汇总
1.1. 环境
- Ubuntu20.04.2 LTS (Linux 5.4.0-152-generic x86_64 GNU/Linux)
- FreeSWITCH-1.10.9-release
1.2. 结论
根据配置和编译过程中的错误提示,基本上就是一些依赖库的缺失问题,根据提示给出的依赖库及其版本要求,只要能在apt源中有可用的直接安装,不然就下载对应的库手动编译安装。
由于笔者的机器系统环境之前可能已经存在一些开发库,下文中列出的问题可能未涵盖其他可能的情况,具体情况需要对照各类日志排查解决。
1.2.1. 可以直接通过apt源安装的依赖库
apt install libpq-dev libspeex-dev libspeexdsp-dev libldns-dev libedit-dev libavformat-dev libswscale-dev liblua5.2-dev libopus-dev libsndfile-dev libpng-dev
1.2.2. 其他需要手动下载源码编译和安装的库
1.3. 配置问题
在源码根目录中执行
./bootstrap.sh
因此系统中需要安装有 autotool 工具链。
生成configure文件后执行
./configure
这一步可能会出现以下问题:
1.3.1. 缺少 PostgreSQL 库
apt install libpq-dev
1.3.2. 缺少 spandsp 库
因为 freeswitch 版本比较新,需要的 spandsp 库版本是3,在 apt 源中的库版本是2,不满足要求,需要手动下载 spandsp源码编译(可能需要依赖库 libtiff-dev,可以在apt源中直接安装)并安装。
切换到git提交:e59ca8f (HEAD) Fix crash when FCD frame has bad length but CRC is OK.
依次执行以下命令
git checkout e59ca8f
./bootstrap.sh
./configure
make && make install
1.3.3. 缺少 sofia-sip-ua 库
因为 freeswitch 要求的这个依赖库的版本需要在1.13.12及以上版本,apt源中版本为1.12.11,无法满足要求,因此也需要手动下载sofia-sip源码包编译并安装。
创建对应版本的新分支,并编译安装。
git checkout -b 1.13.12 v1.13.12
./bootstrap.sh
./configure
make && make install
1.3.4. 缺少 speex、speexdsp 库
apt install libspeex-dev libspeexdsp-dev
1.3.5. 缺少 ldns 库
apt install libldns-dev
1.3.6. 缺少 libks 库
下载并安装 libks-dev,版本在1.8.2及以上即可。
必须要在源码根目录下cmake,不能创建临时文件夹编译,否则安装时会报错!
git checkout -b 1.8.2 v.1.8.2
cmake -DCMAKE_BUILD_TYPE=Release .
make && make install
1.3.7. Signalwire 模块缺失
freeswitch中的这个模块是用于和Signalwire云服务通信相关的,我用不到,所以直接在freeswitch源码根目录下的 modules.conf 中禁用该模块即可。
同时,在后续运行freeswitch时也要在 conf/autoload_configs/modules.conf.xml中注释掉 <load module="mod_signalwire"/>
1.3.8. 缺少 libedit 库
apt install libedit-dev
1.4. 编译问题
在上一步配置通过后,编译时仍然会遇到一些依赖错误,因此这一步可以在编译前都解决掉,再从配置步骤开始编译和安装。
1.4.1. mod_av 编译报错
缺少依赖库 avformat和swscale,这两个库属于ffmpeg组件。可以直接在apt源中获取安装。
apt install libavformat-dev libswscale-dev
1.4.2. lua.h 头文件查找失败
因为我系统中安装的是lua5.3,但是freeswitch-1.10.9中会查找lua5.0、lua5.1、lua5.2,而lua5.3即使安装也无法识别,正好apt源中也有lua5.2的版本可以安装。
apt install liblua5.2-dev
1.4.3. 缺少 opus 库
apt install libopus-dev
1.4.4. 缺少 sndfile 库
apt install libsndfile-dev
1.5. 安装问题
上一步编译成功后,会出现安装提示:
+---------- FreeSWITCH Build Complete ----------+
+ FreeSWITCH has been successfully built. +
+ Install by running: +
+ +
+ make install +
+ +
+ While you're waiting, register for ClueCon! +
+ https://www.cluecon.com +
+ +
+-----------------------------------------------+
按照提示安装完成后,会出现安装声音文件的提示:
+---------- FreeSWITCH install Complete ----------+
+ FreeSWITCH has been successfully installed. +
+ +
+ Install sounds: +
+ (uhd-sounds includes hd-sounds, sounds) +
+ (hd-sounds includes sounds) +
+ ------------------------------------ +
+ make cd-sounds-install +
+ make cd-moh-install +
+ +
+ make uhd-sounds-install +
+ make uhd-moh-install +
+ +
+ make hd-sounds-install +
+ make hd-moh-install +
+ +
+ make sounds-install +
+ make 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 +
...
直接安装最高质量的声音文件,这会同时安装其他质量的声音文件,这个过程会从freeswitch官方网站上下载声音文件并解压到安装目录的sound子目录下。
make cd-sounds-install
1.6. 运行问题
1.6.1. 配置修改
index b5a58d1..d77f585 100644
--- a/conf/autoload_configs/modules.conf.xml
+++ b/conf/autoload_configs/modules.conf.xml
@@ -50,7 +50,7 @@
<load module="mod_verto"/>
<!-- Applications -->
- <load module="mod_signalwire"/>
+ <!-- <load module="mod_signalwire"/> -->
<load module="mod_commands"/>
<load module="mod_conference"/>
<!-- <load module="mod_curl"/> -->
diff --git a/conf/sip_profiles/internal.xml b/conf/sip_profiles/internal.xml
index eb07779..aa8f768 100644
--- a/conf/sip_profiles/internal.xml
+++ b/conf/sip_profiles/internal.xml
@@ -135,6 +135,11 @@
<!--<param name="dtmf-type" value="info"/>-->
+ <!--没有这些设置jssip呼叫时freeswitch会响应488-->
+ <param name="apply-candidate-acl" value="rfc1918.auto"/>
+ <param name="apply-candidate-acl" value="localnet.auto"/>
+ <!-- <param name="apply-candidate-acl" value="wan_v4.auto"/> -->
+
<!-- 'true' means every time 'first-only' means on the first register -->
<!--<param name="send-message-query-on-register" value="true"/>-->
@@ -293,8 +298,9 @@
auto - Use guessed ip.
auto-nat - Use ip learned from NAT-PMP or UPNP
-->
- <param name="ext-rtp-ip" value="$${external_rtp_ip}"/>
- <param name="ext-sip-ip" value="$${external_sip_ip}"/>
+ <!-- 解决呼叫后30s左右就自动挂断的问题 -->
+ <!-- <param name="ext-rtp-ip" value="$${external_rtp_ip}"/> -->
+ <!-- <param name="ext-sip-ip" value="$${external_sip_ip}"/> -->
<!-- rtp inactivity timeout -->
<param name="rtp-timeout-sec" value="300"/>
diff --git a/conf/vars.xml b/conf/vars.xml
index 8948d17..be9ab07 100644
--- a/conf/vars.xml
+++ b/conf/vars.xml
@@ -12,7 +12,7 @@
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
-->
- <X-PRE-PROCESS cmd="set" data="default_password=1234"/>
+ <X-PRE-PROCESS cmd="set" data="default_password=123456"/>
<!-- Did you change it yet? -->
<!--
The following variables are set dynamically - calculated if possible by freeswitch - and
默认密码若不修改,呼叫时可能有10s左右的延时,若想沿用默认密码,可以修改以下地方去掉呼叫时的延时
index c3edafc..e36dda7 100644
--- a/conf/dialplan/default.xml
+++ b/conf/dialplan/default.xml
@@ -132,7 +132,7 @@
<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"/>
+ <!-- <action application="sleep" data="10000"/> -->
</condition>
<!--
This is an example of how to auto detect if telephone-event is missing and activate inband detection
因为是在内网下部署的,不需要用到nat。
freeswitch -nonat -nc
1.6.2. 运行时的报错
笔者在呼叫时,虽然可以成功,但是一直有一个报错
[ERR] switch_core_video.c:3099 This function is not available, libpng not installed
后来重新安装了 libpng-dev,然后重新配置编译安装后解决
1.6.3. tryit-jssip 与 freeswitch 对接呼叫遇到的问题
tryit-jssip使用websocket方式与freeswitch交互,所以需要使用ws或者wss,参考freeswitch的
conf/sip_profile/internal.xml中开通的ws和wss的端口设置。在上述freeswitch修改的配置中有针对jssip的修改,否则呼叫时会收到488,在freeswitch日志中可以看到如下信息:
no suitable candidates found,按照上述修改之后可解决。tryit-jssip默认的会话刷新时间是90s,若直接呼叫freeswitch的话,会收到422,提示最小刷新时间是120s,所以需要修改下tryit-jssip源码,将会话刷新时间调整为120s及以上或者干脆禁用Session Timers。
具体修改可参考:fs-tryit-jssip
关于 tryit-jssip 的使用参考:tryit-jssip 本地部署
1.6.4. 宝利通呼叫一段时间后被挂断并且无法再次被呼叫
RealPresenceDesktop 3.5.1 UDP下会出现此问题,换成TCP即可。
1.7. 参考资料
FreeSWITCH: FreeSWITCH-Explained
FreeSWITCH权威指南-杜金房 张令考
FreeSWITCH 中文文档
Ubuntu下freeSwitch安裝指导
FreeSWITCH 常见问题(个人整理汇总)
通过JsSip使用WebRTC与FreeSwitch进行交互
JsSIP-JsSIP.UA
解决freeswitch30s就挂掉的问题
freeswitch对接WEBRTC的一个candidate问题
Ubuntu20.04 下编译和运行 FreeSWITCH的问题汇总的更多相关文章
- 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- [置顶] ubuntu12.04下编译opencv程序
ubuntu12.04下编译opencv程序 1.在ubuntu下安装好 opencv后(建议使用apt-get install 来安装) 2.使用程序FaceExaple.c来进行测试程序 #inc ...
- 在ubuntu12.04下编译android4.1.2添加JNI层出现问题
tiny4412学习者,在ubuntu12.04下编译android4.1.2添加JNI层出现问题: (虚心请教解决方法) trouble writing output: Too many metho ...
- ubuntu14.04下编译安装ambari-2.4.2.0
ubuntu14.04下编译安装ambari-2.4.2.0 编译前的准备工作 准备工作有: 系统参数 系统依赖(编译环境) 离线安装包 java环境 maven环境 Nodejs环境 git环境 a ...
- Ubuntu16.04下编译安装OpenCV3.4.0(C++ & python)
Ubuntu16.04下编译安装OpenCV3.4.0(C++ & python) 前提是已经安装了python2,python3 1)安装各种依赖库 sudo apt-get update ...
- Ubuntu16.04下编译OpenCV2.4.13静态库(.a文件)
Ubuntu16.04下编译OpenCV2.4.13静态库(.a文件) https://blog.csdn.net/woainishifu/article/details/79712110 我们在做项 ...
- Ubuntu 16.04下编译安装Apache2.4和PHP7结合
Ubuntu 16.04下编译安装Apache2.4和PHP7结合,并安装PDOmysql扩展. 1.编译安装apache2.4.20 1 第一步: ./configure --prefix=/usr ...
- VoIP应用在Ubuntu 14.04下编译FFmpeg libX264及PJSIP
PJSIP是一个开源的SIP协议栈.它支持多种SIP的扩展功能,可说算是最目前流行的SIP协议栈之一了. 它实现了SIP.SDP.RTP.STUN.TURN和ICE.PJSIP作为基于SIP的一个多 ...
- 在Ubuntu18.04下编译出ffmpeg(支持推流H265成rtmp)
Ubuntu18.04下编译libx264.libx265.libfdk_aac和ffmpeg 一.编译x264库 二.编译fdk-aac库 三.编译x265库 四.编译FFmpeg源码 五.设置环境 ...
- Ubuntu16.04下编译安装及运行单目ORBSLAM2
官网有源代码和配置教程,地址是 https://github.com/raulmur/ORB_SLAM2 1 安装必要工具 首先,有两个工具是需要提前安装的.即cmake和Git. sudo apt- ...
随机推荐
- 2022-07-18:以下go语言代码输出什么?A:Groutine;B:Main;C:Goroutine;D:GoroutineMain。 package main import ( “f
2022-07-18:以下go语言代码输出什么?A:Groutine:B:Main:C:Goroutine:D:GoroutineMain. package main import ( "f ...
- 2021-08-07:与数组中元素的最大异或值。给你一个由非负整数组成的数组 nums 。另有一个查询数组 queries ,其中 queries[i] = [xi, mi] 。第 i 个查询的答案是
2021-08-07:与数组中元素的最大异或值.给你一个由非负整数组成的数组 nums .另有一个查询数组 queries ,其中 queries[i] = [xi, mi] .第 i 个查询的答案是 ...
- 2023-05-18:有 n 名工人。 给定两个数组 quality 和 wage , 其中,quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] 。 现在我们想雇佣
2023-05-18:有 n 名工人. 给定两个数组 quality 和 wage , 其中,quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] . 现在我们想雇佣 ...
- vue对vue-giant-tree进行节点操作
vue 项目中使用到了vue-giant-tree这个使用ztree封装的树形插件,在对其节点进行操作时遇到了无法向传统的jquery那样获取到ztreeObj:而导致了无法控制节点dom:浪费了许多 ...
- K2C V21.4.6.12刷breed教程
K2C V21.4.6.12刷breed教程(刷机方法源自qiao99) 原贴地址:K2C V21.4.6.12刷breed记录 http://www.right.com.cn/forum/threa ...
- js有关dom操作学习
dom对象就是操作网页的document dom节点: 整个文档是一个文档节点(document对象) 每个 HTML 元素是元素节点(element 对象) HTML 元素内的文本是文本节点(tex ...
- Linux常用磁盘管理命令详解
du du命令用于查看文件和目录磁盘的使用空间. 命令语法:du [参数] [文件或目录名称] 参数说明: 参数 说明 -a 列出所有的文件与目录容量. -h 以G.M.K为单位,返回容量. -s 列 ...
- 生信服务器 | 更改 CentOS/RHEL 6/7 中的时区
这几天在学习折腾 docker 的时候遇到一个很常见的问题,就是 run container 的时候发现大部分 image 默认使用的时间都是 UTC (Universal Time Coordin ...
- Galaxy 生信平台(二):生产环境部署
在 上一篇文章中,我们介绍了适合单个用户进行使用和开发的 Galaxy 在线平台,今天我们来聊一下在为多用户生产环境设置 Galaxy 时,我们应采取的一些可以让 Galaxy 获得最佳性能的额外步骤 ...
- SpringBoot开发简单接口流程
SpringBoot开发接口 初始化 新建项目 (1)使用 IDEA 的过程,新建Project,左侧选 Spring Initializr,点Next (2)选 8 版本,点Next (3)左侧选择 ...