如何在Ubuntu 20.04|18.04上安装 FreeSwitch

news2024/12/30 2:07:34

如何在Ubuntu 20.04|18.04上安装FreeSwitch

  • 什么是 FreeSwitch PBX?
  • FreeSwitch PBX 系统有哪些功能?
  • 开始部署
    • 部署前准备
    • 开始安装freeswitch
  • 安装完成
  • 错误及问题FAQ
  • 常见配置文件及说明
    • 修改默认端口:
    • 防火墙配置
    • 账号密码配置/添加新用户
    • freeswitch后台基础操作指令
    • VoIP客户端工具推荐:
  • freeswitch官方文档https://freeswitch.org/confluence/
  • http://ffmpeg.org/releases/

PBX 是 Private Branch Exchange 的缩写。它是在组织内部使用的专用电话系统,并根据特定组织的需求进行定制。组织中的 PBX 用户可以在内部进行内部通信,也可以与外界进行外部通信。VoIP(IP 语音)、ISDN(综合业务数字网络)或模拟等渠道促进了外部通信。

使用 PBX 电话系统的优点是,您可以获得比物理线路更多的电话、用户之间的免费通话以及呼叫队列、数字接线员、呼叫转移、语音邮件和呼叫录音等大量功能。PBX 电话系统的一些示例包括 FreeSwitch、3cx、Elastix、FreePBX 和 Asterisk。

在本指南中,我们将了解如何在 Ubuntu 20.04/18.04 上安装 FreeSwitch PBX

什么是 FreeSwitch PBX?

FreeSwitch 是一个免费的开源通信平台。它支持实时通信、视频以及 IP 语音和WebRTC。它可以在 Windows、MacOS、Linux 和 FreeBSD 上运行。它用于构建具有聊天和屏幕共享的网络会议、IVR、会话边界控制器、批发最低成本路由等功能的 PBX 系统。

FreeSwitch PBX 系统有哪些功能?

  • 可在 Windows、Linux 和 FreeBSD 上运行
  • 语音应答接口
  • WebRTC 支持
  • 通话录音(立体声呼叫者/被呼叫者左/右)
  • 高性能多线程核心引擎
  • 平行狩猎
  • 连环狩猎
  • 自动服务员
  • 基本 IP/PBX 功能
  • 自定义回铃音(早期媒体)

开始部署

freeswitch1.10.7/freeswitch1.10.8安装情况应该与freeswitch1.10.9相同

部署前准备

sudo apt-get install libavformat-dev
sudo apt-get install libswscale-dev
sudo apt-get install libpq-dev

在 Ubuntu 20.04/18.04 上安装 FreeSwitch PBX
首先更新你的系统包

sudo apt -y update
sudo apt -y upgrade

接下来,安装在 Ubuntu 20.04/18.04 上运行 FreeSwitch PBX 所需的依赖项

sudo apt install -y git subversion build-essential autoconf automake libtool g++ pkg-config
	libtiff-dev libncurses5 libncurses5-dev make libjpeg-dev libtool libtool-bin
	libsqlite3-dev libpcre3-dev libspeexdsp-dev libldns-dev libedit-dev
	yasm uuid uuid-dev liblua5.2-dev libopus-dev cmake

以下软件包是可选的,但我们可以安装它们。

sudo apt install -y libcurl4-nss-dev libcurl4-openssl-dev libexpat1-dev
libgnutls28-dev libtiff5-dev libx11-dev unixodbc-dev libssl-dev python-dev
zlib1g-dev libasound2-dev libogg-dev libvorbis-dev libperl-dev libgdbm-dev libdb-dev uuid-dev libsndfile1-dev

下载源代码
freeswitch1.10.4及之后的版本freeswitch官方将spandsp 和 sofia-sip单拎出来了,需要单独拉代码编译,如果是编译1.10.4之前的freeswitch(如freeswitch1.10.2版本)不必单独拉spandsp和sofia-sip的代码,直接编译freeswitch即可

重大改动历史:
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Release-Notes/FreeSWITCH
	-1.10.x-Release-notes_25460878/

//可直接在上述链接中下载freeswitch的tar包
1.8 -> 1.10.0: pgqsql moved out from FreeSWITCH core to its own module, mod_pgsql .
See 1.10.0 (Release date: 05 August 2019) at the bottom.
1.10.3 -> 1.10.4: SpanDSP and sofia-sip have been removed.
See 1.10.4 (Release date: 05 Aug 2020)​ below.
1.10.6 -> 1.10.7: Default behaviour change: to not skip announcement type apps on recovery, 
not hangup call on SRTP errors, 1000 maximum receiving requests per second, auth-messages
 and auth-subscriptions are enabled by default now, freeswitch.log log line prefix modified: 
 will affect fail2ban log line matching until similarly modified in fail2ban 
 (https://github.com/fail2ban/fail2ban/issues/3143).
See 1.10.7 (Release date: 24 Oct 2021)​ below.

安装spandsp、sofia-sip、libks和signalwire

// 安装spandsp
# git clone https://github.com/freeswitch/spandsp.git
# cd spandsp
# ./bootstrap.sh -j
# ./configure
# make
# sudo make install
# ldconfig

// 安装sofia-sip
no usable sofia-sip; please install sofia-sip-ua devel package or equivalent
# git clone https://github.com/freeswitch/sofia-sip.git
#cd sofia-sip
# ./bootstrap.sh -j
# ./configure
# make
# make install0
# ldconfig

sudo apt install -y cmake
cd /usr/src
sudo git clone https://github.com/signalwire/libks.git
cd libks
sudo cmake .
sudo make
sudo make install

cd /usr/src
git clone https://github.com/signalwire/signalwire-c.git
cd signalwire-c
sudo cmake .
sudo make
sudo make install

编译freeswitch前将不必要的模块编译禁用掉,如果不禁用则需要安装对应的依赖,否则会报错

cd /usr/local/src/freeswitch
vim module.conf

//将mod_signalwire和mod_av内容注释掉

#applications/mod_signalwire
#applications/mod_av

//mod_verto不禁用可能会编译报错You need to either install libks or disable mod_verto in modules.conf
#endpoints/mod_verto  

开始安装freeswitch

接下来,使用 wget从 freeswitch发布页面 获取最新的 FreeSwitch 版本:

cd /usr/src
sudo wget https://files.freeswitch.org/freeswitch-releases/freeswitch-1.10.3.-release.zip
sudo apt -y install unzip
sudo unzip freeswitch-1.10.3.-release.zip
cd freeswitch-1.10.3.-release/

请注意 ,如果您尚未安装 unzip,请通过运行 apt -y install unzip安装它

sudo apt -y install unzip

现在运行标准安装过程

//编译freeswitch
cd /usr/local/src/freeswitch
./bootstrap.sh  //如果是GitHub拉的代码有这一步,如果是下载tar包解压的没有这一步
./configure --enable-portable-binary --prefix=/usr/local/freeswitch
	--with-gnu-ld --with-python --with-openssl
	--enable-core-odbc-support --enable-zrtp
make

如果在编译过程中遇到错误,您可以注释掉任何引发错误的模块或安装缺少的依赖项。就我而言,我最初注释掉了 languages/mod_lua 和 applications/mod_signalwire ,但您可以根据收到的错误注释更多内容。之后重新启动编译,如下所示:

sudo ./configure && sudo make clean && sudo make

如果编译成功, 接下来,安装 freeswitch:

sudo make install

现在编译声音

sudo make all cd-sounds-install cd-moh-install

安装完成

创建 simlink 以轻松使用服务。

sudo ln -s /usr/local/freeswitch/bin/freeswitch /usr/bin/
sudo ln -s /usr/local/freeswitch/bin/fs_cli /usr/bin

添加具有较低权限的新组和用户来运行 FreeSWITCH 服务。

cd /usr/local
sudo groupadd freeswitch
sudo adduser --disabled-password  --quiet --system
	--home /usr/local/freeswitch --gecos "FreeSWITCH Voice Platform" --ingroup freeswitch freeswitch
sudo chown -R freeswitch:freeswitch /usr/local/freeswitch/
sudo chmod -R ug=rwX,o= /usr/local/freeswitch/
sudo chmod -R u=rwx,g=rx /usr/local/freeswitch/bin/

我们需要将 FreeSwitch 添加为 systemd 单元文件。使用您喜欢的编辑器打开新文件 /etc/systemd/system/freeswitch.service并 粘贴以下内容:

sudo vim /etc/systemd/system/freeswitch.service

粘贴以下内容

[Unit]
Description=freeswitch
Wants=network-online.target
Requires=syslog.socket network.target local-fs.target
After=syslog.socket network.target network-online.target local-fs.target

[Service]
Type=forking
Environment="DAEMON_OPTS=-nonat"
EnvironmentFile=-/etc/default/freeswitch
ExecStartPre=/bin/chown -R freeswitch:freeswitch /usr/local/freeswitch
ExecStart=/usr/bin/freeswitch -u freeswitch -g freeswitch -ncwait $DAEMON_OPTS
TimeoutSec=45s
Restart=always
RestartSec=90
StartLimitInterval=0
StartLimitBurst=6

User=root
Group=daemon
LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=60000
LimitSTACK=250000
LimitRTPRIO=infinity
LimitRTTIME=infinity
IOSchedulingClass=realtime
IOSchedulingPriority=2
CPUSchedulingPolicy=rr
CPUSchedulingPriority=89
UMask=0007
NoNewPrivileges=false

[Install]
WantedBy=multi-user.target

启动 FreeSwitch 服务并在启动时启用它

sudo chmod ugo+x freeswitch.service
sudo systemctl start freeswitch.service
sudo systemctl enable freeswitch.service

现在检查 FreeSWITCH 服务的状态

sudo systemctl status freeswitch.service

如果 freeswitch 已正确安装并运行,输出应如下所示
在这里插入图片描述
现在您可以使用客户端连接到 FreeSWITCH,如下所示

# fs_cli -r

您将看到如下输出:
在这里插入图片描述

错误及问题FAQ

一般是软件或库找不到,有三种解决方法

  1. 使用apt install安装
  2. 从github或gitee上下载源码进行编译安装
  3. freeswitch可以通过编辑module.conf文件禁用相关模块

安装过程中遇到的问题及解决方法

  1. build-requirements: autoconf not found.
    解决方法: sudo apt install autoconf
  2. build-requirements: libtool not found.
    解决方法: sudo apt install libtool-bin
  3. 缺少spandsp
# git clone https://github.com/freeswitch/spandsp.git
# cd spandsp
# ./bootstrap.sh -j
# ./configure
# make
# make install
# ldconfig
  1. 缺少sofia-sip
    no usable sofia-sip; please install sofia-sip-ua devel package or equivalent
# git clone https://github.com/freeswitch/sofia-sip.git
#cd sofia-sip
# ./bootstrap.sh -j
# ./configure
# make
# make install
# ldconfig
  1. fatal error: openssl/ssl.h: No such file or directory
    解决方法: sudo apt install libssl-dev

  2. Package sqlite3 was not found
    解决方法:
    sudo apt install libsqlite3-dev
    sudo apt install sqlite3

  3. libcurl was not found
    解决方法: sudo apt install libcurl4-nss-dev

  4. Package libpcre was not found
    解决方法: sudo apt install libpcre3-dev

  5. Package speex was not found
    sudo apt install libspeexdsp-dev

  6. You need to either install libldns-dev or disable mod_enum in modules.conf
    解决方法: sudo apt install libldns-dev

  7. You need to either install libks or disable mod_verto in modules.conf
    方法一:下载安装 https://github.com/signalwire/libks.git
    方法二:1 禁用 mod_verto1

  sudo vim modules.conf 
  #endpoints/mod_verto
  1. error: You need to either install libedit-dev
    解决方法: sudo apt install libedit-dev

  2. 缺少yasm
    解决方法: sudo apt install yasm

  3. You need to either install signalwire-client-c
    方法一:下载编译安装: https://github.com/signalwire/signalwire-c.git
    方法二: 注释掉modules.conf中的signalwire模块

  4. 编译错误
    ./include/apr_general.h:33:14: error: ‘__DARWIN_NSIG’ undeclared here (not in a function) 33 | #define NSIG __DARWIN_NSIG
    注: 没找到原因,发现没有代码使用该定,直接将该行定义注释掉

  5. 接口过期编译错误
    错误1:

In file included from src/switch_apr.c:79:
/usr/include/openssl/md5.h:49:27: note: declared here
   49 | OSSL_DEPRECATEDIN_3_0 int MD5_Init(MD5_CTX *c);
      |                           ^~~~~~~~
src/switch_apr.c:1177:9: warning: ‘MD5_Update’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
 1177 |         MD5_Update(&md5_context, input, inputLen);
解决方法:关闭接口过期警告
sudo vim Makefile
	CFLAGS = -g -O2 -Wno-error=deprecated-declarations

错误2:

skinny_protocol.c:685:65: error: array subscript ‘skinny_message_t {aka struct skinny_message}[0]’ is partly outside array bounds of ‘unsigned char[292][-Werror=array-bounds]
CFLAGS = -g -O2 -Wno-error=deprecated-declarations -Wno-error=array-bounds

解决方法:关闭相应告警

sudo vim Makefile
	CFLAGS = -g -O2  -Wno-error=array-bounds
  1. 没有libavformat-dev and libswscale-dev
    Makefile:1481: *** You must install libavformat-dev and libswscale-dev to build mod_av. Stop.
    解决方法:
sudo apt install libavformat-dev
sudo apt install libswscale-dev

注: 如果编译时还提示找不到,需要重新执行sudo ./configure

  1. 缺少libtiff
    configure: error: "Cannot build without libtiff (does your system require a libtiff-devel package?)"
    解决方法:sudo apt install libtiff-dev

  2. 缺少uuid
    src/switch_apr.c:81:10: fatal error: uuid/uuid.h: No such file or directory
    解决方法:sudo apt install uuid
    如果依旧找不到,查看 一下uuid.h文件的位置, 在笔者环境中,如下

$ ls /usr/include/linux/uuid.h 
/usr/include/linux/uuid.h

可以看出uuid.h在linux目录下,只要相应的创建/usr/lnclude/uuid目录,并将linux/uuid.h拷贝过去可以了

  1. 找不到uuid_xx函数
/usr/bin/ld: ./.libs/libfreeswitch.so: undefined reference to `uuid_parse'
/usr/bin/ld: ./.libs/libfreeswitch.so: undefined reference to `uuid_unparse_lower'
/usr/bin/ld: ./.libs/libfreeswitch.so: undefined reference to `uuid_generate'

解决方法:sudo apt install uuid-dev

  1. 报了spandsp相关内容编译的错误error: ‘V18_MODE_5BIT_4545’ undeclared:
making all mod_spandsp
make[4]: Entering directory `/usr/local/src/freeswitch-1.10.9.-release/src/mod/applications/mod_spandsp'
  CC       mod_spandsp_la-mod_spandsp.lo
  CC       mod_spandsp_la-udptl.lo
  CC       mod_spandsp_la-mod_spandsp_fax.lo
  CC       mod_spandsp_la-mod_spandsp_dsp.lo
mod_spandsp_dsp.c: In function ‘get_v18_mode’:
mod_spandsp_dsp.c:159:10: error: ‘V18_MODE_5BIT_4545’ undeclared (first use in this function)
  int r = V18_MODE_5BIT_4545;
          ^
mod_spandsp_dsp.c:159:10: note: each undeclared identifier is reported only once for each function it appears in
mod_spandsp_dsp.c:165:8: error: ‘V18_MODE_5BIT_50’ undeclared (first use in this function)
    r = V18_MODE_5BIT_50;
        ^
mod_spandsp_dsp.c: In function ‘spandsp_tdd_send_session’:
mod_spandsp_dsp.c:216:2: error: too few arguments to function ‘v18_init’
  tdd_state = v18_init(NULL, TRUE, get_v18_mode(session), V18_AUTOMODING_GLOBAL, put_text_msg, NULL);
  ^
In file included from /usr/local/include/spandsp.h:111:0,
                 from mod_spandsp.h:50,
                 from mod_spandsp_dsp.c:36:
/usr/local/include/spandsp/v18.h:138:29: note: declared here
 SPAN_DECLARE(v18_state_t *) v18_init(v18_state_t *s,
                             ^
mod_spandsp_dsp.c: In function ‘spandsp_tdd_encode_session’:
mod_spandsp_dsp.c:263:2: error: too few arguments to function ‘v18_init’
  pvt->tdd_state = v18_init(NULL, TRUE, get_v18_mode(session), V18_AUTOMODING_GLOBAL, put_text_msg, NULL);
  ^
In file included from /usr/local/include/spandsp.h:111:0,
                 from mod_spandsp.h:50,
                 from mod_spandsp_dsp.c:36:
/usr/local/include/spandsp/v18.h:138:29: note: declared here
 SPAN_DECLARE(v18_state_t *) v18_init(v18_state_t *s,
                             ^
mod_spandsp_dsp.c: In function ‘spandsp_tdd_decode_session’:
mod_spandsp_dsp.c:341:2: error: too few arguments to function ‘v18_init’
  pvt->tdd_state = v18_init(NULL, FALSE, get_v18_mode(session), V18_AUTOMODING_GLOBAL, put_text_msg, pvt);
  ^
In file included from /usr/local/include/spandsp.h:111:0,
                 from mod_spandsp.h:50,
                 from mod_spandsp_dsp.c:36:
/usr/local/include/spandsp/v18.h:138:29: note: declared here
 SPAN_DECLARE(v18_state_t *) v18_init(v18_state_t *s,
                             ^
make[4]: *** [mod_spandsp_la-mod_spandsp_dsp.lo] Error 1
make[4]: Leaving directory `/usr/local/src/freeswitch-1.10.9.-release/src/mod/applications/mod_spandsp'
make[3]: *** [mod_spandsp-all] Error 1
make[3]: Leaving directory `/usr/local/src/freeswitch-1.10.9.-release/src/mod'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/usr/local/src/freeswitch-1.10.9.-release/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/freeswitch-1.10.9.-release'
make: *** [all] Error 2
[root@maomaosPC freeswitch-1.10.9.-release]# 

将源代码放到Source Insight工程中搜索相关关键词检查发现是spandsp中的内容导致的编译错误,freeswitch相关部分的代码和spandsp模块代码不匹配,去GitHub上查看提交记录,刚好是23年6月底提交的,离我编译就隔了几天的时间,真是个倒霉蛋哦。言归正传,这时候考虑回退spandsp的代码到之前代码匹配的版本,然后重新编译就可以编译成功。
具体步骤:

//先切到对应目录下删除相关内容
cd /usr/local/src/freeswitch
rm -rf spandsp
//重新拉取代码
git clone https://github.com/freeswitch/spandsp.git
//spandsp目录下执行git log或者gitlab上查看对应commit id并切换
git checkout -b finecode20230705 0d2e6ac65e0e8f53d652665a743015a88bf048d4
//按照之前的步骤重新编译安装
//在Github上反馈了这个问题后, 维护人员2023/07/19回复:
mod_spandsp uses the defines you change, e.g. V18_MODE_5BIT_4545 from v18.h,
so it is broken now as it hasn't been updated. It needs to be updated with new defines.

常见配置文件及说明

文件说明
vars.xml一些常用变量
dialplan/default.xml缺省的拨号计划
directory/default/*.xmlSIP用户,每用户一个文件
sip_profiles/internal.xml一个SIP
sip_profiles/externa.xml另一个SIP-UA,用作外部连接,端口5080
autoload_configs/modules.conf.xml配置当FreeSWITCH启动时自动装载哪些模块

修改默认端口:

cd /usr/local/freeswitch/conf
#(freeswitch1.10.9在/usr/local/freeswitch/etc/freeswitch目录下)
#找到vars.xml修改:(可以copy一份存为vars.xml.bak备份)
#修改默认端口
#<X-PRE-PROCESS cmd="set" data="internal_sip_port=5060"/>
#5060默认为freswitch 的sip信令内部端口

防火墙配置

1、在var.xml中修改
<!--X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=stun:stun.freeswitch.org"/--> 
这里没有使用stun功能,而是直接把公网ip填在这里

<X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip="阿里云分配的公网ip"/>
(freeswitch1.10.9好像如果是默认的端口不用配置这个也能正常使用,修改xml文件后无法访问需要设置stun再reloadxml)

在var.xml中修改了之后,就无需在conf/sip_profiles/internal.xml 和 external.xml中修改了,
网上有很多例子都是直接在这两个文件改其实不用,var中改好了之后,这两个文件直接引用external_rtp_ip这个变量即可。

防火墙配置完成后应该就可以了,使用设备注册上服务器拨打下回音电话9196试试能不能听到回音。

FreeSwitch常用默认号码:

号码说明
9664保持音乐
9191注册CluCon
9192调用info在log中显示Channel信息
9195echo, 回音测试,延迟5秒
9196echo,回音测试
9197milliwatte extention, 铃音生成
9198TGML铃音生成示例
9180铃音测试,使用远端生成的回铃音
9181铃音测试,产生英式铃音
9182铃音测试,使用音乐当铃音,彩铃
9183先应答,然后发送英式铃音
9184先应答,然后发送音乐铃音
9178收传真
9179发传真
5000IVR实例
4000听取主意信箱
33xx电话会议,48Hz(其中xx为00~99,下同)
32xx电话会议,32Hz(其中xx为00~99,下同)
31xx电话会议,16Hz(其中xx为00~99,下同)
30xx电话会议,8Hz(其中xx为00~99,下同)
2000-2002呼叫组
1000-1019默认分机号码(默认密码1234)

FreeSwitch默认号码大部分是拨号计划的名称,具体定义在conf/diaplan/default.xml中

账号密码配置/添加新用户

修改默认密码:vars.xml
<X-PRE-PROCESS cmd="set" data="default_password=1234"/>
freeswitch批量添加用户
参考:https://blog.51cto.com/u_15049794/3833216
(freeswitch1.10.9在/usr/local/freeswitch/etc/freeswitch目录下寻找)
/usr/local/freeswitch/conf/directory/default 下有1000.xml~1019.xml 这20个默认用户的配置文件
创建用户的xml后,要加载这些新用户的xml,需要修改/usr/local/freeswitch/conf/dialplan/default.xml这个文件里的拨号规则(正则表达式):

<extension name="Local_Extension">
<!-- 这里可以修改正则范围,允许所有分机号-->
<!--默认为  <condition field="destination_number" expression="^(10[01][0-9])$">   -->
<condition field="destination_number" expression="^([0-9]\d+)$">
<!-- ... -->
<action application="set" data="call_timeout=120"/>
<!-- ... -->
</condition>
</extension>

主要是改下正则表达式,允许所有数字。另外,默认还有一个N秒不接认为超时的配置,默认是30秒,如果有需要调整的,也可以一并修改。
调整/usr/local/freeswitch/conf/dialplan/public.xml

<extension name="public_extensions">
   <!-- 允许所有分机号 -->
   <condition field="destination_number" expression="^([0-9]\d+)$">
       <action application="transfer" data="$1 XML default"/>
   </condition>
</extension>

批量生成用户xml文件:

import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CreateFreeswitchUser {

    public static void main(String[] args) throws IOException {
        String template = "D:\\soft\\FreeSWITCH\\conf\\directory\\default\\";
        String templateContent = read(template + "1000.xml");
        //创建99个用户
        for (int i = 1; i < 100; i++) {
            String newUser = "1" + StringUtils.leftPad(i + "", 3, '0');
            String newContent = templateContent.replaceAll("1000", newUser);
            String newFileName = template + newUser + ".xml";
            write(newFileName, newContent);
            System.out.println(newFileName + " done!");
        }
    }

    static String read(String fileName) throws IOException {
        File f = new File(fileName);
        if (!f.exists()) {
            return null;
        }
        FileInputStream fs = new FileInputStream(f);
        String result = null;
        byte[] b = new byte[fs.available()];
        fs.read(b);
        fs.close();
        result = new String(b);
        return result;
    }

    static void write(String fileName, String fileContent) throws IOException {
        File f = new File(fileName);
        if (f.exists()) {
            f.delete();
        }
        FileOutputStream fs = new FileOutputStream(f);
        fs.write(fileContent.getBytes());
        fs.flush();
        fs.close();
    }
}

然后将生成的用户文件拷贝到/usr/local/freeswitch/conf/directory/default目录下

freeswitch后台基础操作指令

ps -ef | grep freeswithch 查看进程号
netstat -an | grep 5060 查询FreeSWITCH 监听在哪个IP地址上(默认5060端口的情况下)
whereis freeswitch 查看freeswitch安装路径


freeswitch -help可查看帮助信息
freeswitch  启动并前台运行
freeswitch -nc  启动并后台运行
freeswitch -stop 停止

fs_cli 进入freeswitch控制台后:
show registrations 查看注册用户情况
sofia status profile internal reg 显示在线注册用户信息
status 查看freeswitch的运行状态
/exit 或 /quit 或 /bye  退出fs_cli
shutdown 关闭freeswitch
reloadxml 重新加载xml配置
console loglevel 7 开启控制台日志级别, 0-7, 数字越大日志越多
version 显示版本信息

VoIP客户端工具推荐:

推荐portsip-uc和linphone,Android和Windows均有安装包,portsip在IOS上应该也是有客户端的,可自行搜索下载使用

freeswitch官方文档https://freeswitch.org/confluence/

http://ffmpeg.org/releases/

1、官网下载ffmpeg4.1。
2、进入ffmpeg4.1根目录执行
 	`./configure --enable-shared --enable-gpl  --enable-libx264 --enable-libspeex`
3、执行make和make install。如果出现类似
	make: Warning: File  ffbuild/config.mak' has modification time 8011 s in the future
	的警告执行
	find . -type f | xargs -n 5 touch。
4、执行ldconfig加载。
5、执行ffmpeg -codecs如果能返回编码,表示编译成功。
 
备注:先要安装`libx264。`
如果无法执行有可能是路径错误,尝试设置环境变量LD_LIBRARY_PATH={安装路径},
查找安装路径的方法:`find / -name ffmpeg`

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/982168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在JavaScript中实现继承?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 原型链继承⭐ 借用构造函数继承&#xff08;构造函数继承&#xff09;⭐ 组合继承⭐ 原型式继承⭐ 寄生式继承⭐ 寄生组合式继承⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本…

Java+Swing+mysql高校教材管理系统

JavaSwingmysql高校教材管理系统 一、系统介绍二、功能展示1.用户登陆2.主页3.教材库管理4.出版社管理5.订单管理6.入库管理7.领书管理 三、系统实现1.salary.java 四、其它系统五、获取源码 一、系统介绍 1.实现出版社、教材类型等的管理&#xff1b; 2.实现教材的订购管理&…

LLM大模型推理加速 vLLM;Qwen vLLM使用案例;模型生成速度吞吐量计算

参考&#xff1a; https://github.com/vllm-project/vllm https://zhuanlan.zhihu.com/p/645732302 https://vllm.readthedocs.io/en/latest/getting_started/quickstart.html ##文档 1、vLLM 这里使用的cuda版本是11.4&#xff0c;tesla T4卡 加速原理&#xff1a; Paged…

STM32CubeMX驱动INA226芯片

环境 1、单片机&#xff1a;STM32F042F6P6 2、编译器&#xff1a;KeilMDK 3、配置工具&#xff1a;STM32CubeMX 目标 使用STM32的硬件IIC接口驱动高侧/低侧测量、双向电流/功率监视器INA226。 开始 1、配置STM32F042F6P6的IIC 2、编写INA226的驱动 头文件&#xff1a; #…

Windows11安装配置Git

安装配置Git 1.安装Git1.1下载Git1.2Git的安装1.安装2.安装声明3.安装路径选择4.选择安装组件5.开始菜单文件夹6.选择Git默认编辑器7.决定初始化新项目(仓库)的主干名称8.调整你的path环境变量9.选择SSH执行文件10.配置行尾符号转换11.配置终端模拟器与Git Bash一起使用12.选择…

上海亚商投顾:沪指探底回升 光刻胶概念股全线爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指早间弱势震荡&#xff0c;午后反弹拉升翻红&#xff0c;创业板指一度跌超1%&#xff0c;随后跌幅有所收窄…

算法通关村第12关【白银】| 字符串经典问题

一、反转问题 1.反转字符串 思路&#xff1a;双指针&#xff0c;反转数组一个套路 class Solution {public void reverseString(char[] s) {int l 0;int r s.length -1;while(l<r){char c s[l];s[l] s[r];s[r] c;l;r--;}} } 2.k个一组反转 思路&#xff1a;每k个进行…

noetic 怎么下载robotiq_modbus_tcp 从而使用robotiq二指夹爪

1&#xff0c;会科学上网 2&#xff0c; # Modbus TCP rosdep install robotiq_modbus_tcp3&#xff0c;报错 4&#xff0c;去robotiq的功能包里面找两个大爷&#xff08;tmd&#xff09; 分别修改package.xml 本来是python &#xff0c; 然后分别修改成python3 然后参考其他…

jpg格式图片怎么弄?不同格式图片该怎么转换?

在日常生活和工作中&#xff0c;我们经常会遇到需要转换图片格式的情况。本文将介绍如何将jpg格式图片转换为其他格式&#xff0c;以及如何转换不同格式的图片。 jpg格式图片转换的一些问题 jpg是一种常见的图片格式&#xff0c;但在某些情况下&#xff0c;需要将其转换为其他…

信息化项目软件安全测评验收

安全测试 随着信息系统业务覆盖率的提高和深度整合创新的逐步提高&#xff0c;信息系统运行阶段的复杂性和资源比例逐渐增加。一方面&#xff0c;信息已成为业务创新、技术应用和运营服务的综合体&#xff0c;而不仅仅是技术平台建设。另一方面&#xff0c;信息采购是技术平台…

Linux的LVM磁盘扩容

目录 引子环境扩容步骤结束 引子 最近因为有个服务器的磁盘和内容太小了&#xff0c;连按tab都要提示No space left on device了&#xff0c;实在受不了了&#xff0c;更何况服务器的项目也因为没有空间直接崩了&#xff0c;在领导申请到了内存和磁盘后立马着手去扩硬盘&#…

Matlab图像处理- 高斯低通滤波器

高斯低通滤波器 高斯低通滤波器是一种更平滑的一种滤波器&#xff0c;高斯低通滤波器完全没有振铃现象&#xff0c;且边缘平滑。 示例代码 利用输入图像&#xff0c;构建一个截止频率为30的高斯低通滤波器的透视图如下图所示。 M 2*size(I,1); %滤波器…

Vue进阶(贰幺幺)CVE-2020-11022/CVE-2020-11023漏洞解析

文章目录 一、前言二、漏洞原理三、修复方案3.1 升级jQuery3.2 1.x 升级至 3.x 需要考虑的问题3.2.1 table表格元素自动添加tbody3.2.2 方法变更 3.3 jquery migrate是什么 四、拓展阅读 一、前言 代码安全扫描阶段&#xff0c;前端资源审计发现jQuery版本过低导致生产系统存在…

52、基于函数式方式开发 Spring WebFlux 应用

★ Spring WebFlux的两种开发方式 1. 采用类似于Spring MVC的注解的方式来开发。此时开发时感觉Spring MVC差异不大&#xff0c;但底层依然是反应式API。2. 使用函数式编程来开发★ 使用函数式方式开发Web Flux 使用函数式开发WebFlux时需要开发两个组件&#xff1a; ▲ Han…

基于Java+SpringBoot+Vue前后端分离成绩管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

vue 脚手架新手入门(vue cli 3)

文章目录 1、vue中的 “:” 绑定和 “” 监听1.1、v-model 双向绑定 2、if 、else 、for3、computed 计算属性4、生命周期&#xff08;属性加载顺序&#xff09;5、watch 侦听器6、 components 组件6.1、props 从父组件获取收据6.2、emits 向父组件触发事件6.3、slots插槽&…

UART串口的8倍过采样和16倍过采样原理

由于在空闲状态时&#xff0c;传送线为逻辑“1”状态&#xff0c;而数据的传送总是以一个起始位“0”开始&#xff0c;所以当接收器检测到一个从"1"向"0”的跳变时&#xff0c;便视为可能的起始位&#xff08;要排除干扰引起的跳变) ;起始位被确认后,就知道发送…

java八股文面试[数据库]——JOIN优化

JOIN 是 MySQL 用来进行联表操作的&#xff0c;用来匹配两个表的数据&#xff0c;筛选并合并出符合我们要求的结果集。 JOIN 操作有多种方式&#xff0c;取决于最终数据的合并效果。常用连接方式的有以下几种: 什么是驱动表 ? 多表关联查询时,第一个被处理的表就是驱动表,使用…

大陆学者周志华当选IJCAI理事会主席,系54年来首次

8月25日&#xff0c;在澳门举行的第32届国际人工智能联合会议&#xff08;IJCAI &#xff09;2023闭幕式上&#xff0c;IJCAI 执行委员会宣布&#xff0c;南京大学周志华教授当选为新一届的国际人工智能联合会理事会&#xff08;IJCAI Trustee&#xff09;主席。周志华是中国大…

KT142C-sop16语音芯片ic的功能介绍 支持pwm和dac输出 usb直接更新内置空间

1.1 简介 KT142C是一个提供串口的SOP16语音芯片&#xff0c;完美的集成了MP3的硬解码。内置330KByte的空间&#xff0c;最大支持330秒的语音长度&#xff0c;支持多段语音&#xff0c;支持直驱0.5W的扬声器无需外置功放 软件支持串口通信协议&#xff0c;默认波特率9600.同时…