在Debian上安装freeswitch
在Debian上安装freeswitch
说明:
- 首次发表日期:2024-08-12
- 参考文档:
- https://medium.com/@jogikrunal9477/ultimate-guide-to-installing-freeswitch-on-ubuntu-22-04-lts-3745ef6a6bd6
- https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Installation/Linux/Deprecated-Installation-Instructions/Debian-Post-Install-Tasks_13172868/
- https://blog.csdn.net/qq_36369267/article/details/131564019
安装系统依赖
查看系统版本:
cat /etc/issue
Debian GNU/Linux 12 \n \l
安装系统依赖:
参考 https://medium.com/@jogikrunal9477/ultimate-guide-to-installing-freeswitch-on-ubuntu-22-04-lts-3745ef6a6bd6
sudo apt updatesudo apt-get install build-essential automake autoconf git-core wget libtool cmake pkg-config uuid-devsudo apt-get install libncurses5-dev libtiff-dev libjpeg-dev zlib1g-dev libssl-dev libsqlite3-devsudo apt-get install libpcre3-dev libspeexdsp-dev libspeex-dev libcurl4-openssl-dev libopus-dev libpq5 libpq-dev unixodbc-dev libldns-dev libedit-dev yasm liblua5.2-dev liblua5.2-0 libxml2-dev lua5.2 lua5.2-doc libtiff5-dev libsndfile1-dev unzip sngrep libreadline-dev ntpdatesudo apt install python3 python3-venv python3-pip python3-distutilssudo apt install libavformat-dev libswscale-dev
构建和安装依赖库
libks
- https://github.com/signalwire/libks
git clone -b v2.0.6 https://github.com/signalwire/libks.git
cd libks
cmake . -DCMAKE_BUILD_TYPE=Release
make -j 32
sudo make install
注意:可能需要注释掉CMakeList.txt中Generate a Debian compliant changelog的部分
singalwire-c
- https://github.com/signalwire/signalwire-c
git clone -b v2.0.0 https://github.com/signalwire/signalwire-c.git
cd signalwire-c
cmake . -DCMAKE_BUILD_TYPE=Release
make -j 32
sudo make install
spansdp
参考: https://blog.csdn.net/qq_36369267/article/details/131564019
git clone https://github.com/freeswitch/spandsp.git
cd spandsp/
git checkout -b finecode20230705 0d2e6ac65e0e8f53d652665a743015a88bf048d4
./bootstrap.sh
./configure
make -j 32
sudo make install
sofia-sip
git clone -b v1.13.17 https://github.com/freeswitch/sofia-sip.git
cd sofia-sip
./bootstrap.sh
./configure
make -j 32
sudo make install
安装 freeswitch
wget https://files.freeswitch.org/freeswitch-releases/freeswitch-1.10.12.-release.tar.gz
tar -xvf freeswitch-1.10.12.-release.tar.gz
cd freeswitch-1.10.12.-release
./configure --enable-core-odbc-support --enable-core-pgsql-support
make -j 32
sudo make install
注意:源码打包为tar.gz前已经执行了bootstrap.sh了,所以不需要执行bootstrap.sh
安装声音文件:
# 标准
sudo make sounds-install
sudo make moh-install
# 高清
sudo make cd-sounds-install
sudo make cd-moh-install
配置软链接:
sudo ln -sf /usr/local/freeswitch/bin/freeswitch /usr/bin/
sudo ln -sf /usr/local/freeswitch/bin/fs_cli /usr/binsudo ln -s /usr/local/freeswitch/conf /etc/freeswitch
设置权限:
参考: https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Installation/Linux/Deprecated-Installation-Instructions/Debian-Post-Install-Tasks_13172868#set-owner-and-permissions
sudo groupadd freeswitchsudo adduser --quiet --system --home /usr/local/freeswitch --gecos 'FreeSWITCH open source softswitch' --ingroup freeswitch freeswitch --disabled-passwordsudo chown -R $USER: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
其中
/etc/freeswitch/文件夹下存放配置文件/usr/local/freeswitch/db存放可能用到的sqlite数据库文件,如core.db
检查进程查看freeswitch是否在运行:
ps aux | grep freeswitch
查看freeswitch监听的IP地址:
netstat -an | grep 5060
停止freeswitch:
# freeswitch 控制台
shutdown
# 终端
freeswitch -stop
后台启动(Deamon服务):
freeswitch -nc
客户端连接:
fs_cli
查看帮助:
freeswitch -help
配置为系统服务(开机启动)
创建service文件:
sudo vi /etc/systemd/system/freeswitch.service
粘贴如下内容:
[Unit]
Description=FreeSWITCH
Wants=network-online.target
Requires=network.target local-fs.target
After=network.target network-online.target local-fs.target[Service]
Type=forking
PIDFile=/usr/local/freeswitch/run/freeswitch.pid
Environment="DAEMON_OPTS=-nonat"
Environment="USER=freeswitch"
Environment="GROUP=freeswitch"
EnvironmentFile=-/etc/default/freeswitch
ExecStartPre=/bin/chown -R ${USER}:${GROUP} /usr/local/freeswitch
ExecStart=/usr/local/freeswitch/bin/freeswitch -u ${USER} -g ${GROUP} -ncwait ${DAEMON_OPTS}
TimeoutSec=45s
Restart=always[Install]
WantedBy=multi-user.target
Reload systemd daemon:
sudo systemctl daemon-reload
开启和启动服务:
sudo systemctl enable freeswitch.service
sudo systemctl start freeswitch.service
查看服务状态:
sudo systemctl status freeswitch.service
WSL端口转发
参考:
- https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc776297(v=ws.10)
- https://blog.csdn.net/u013600225/article/details/52088196
本次测试的debian是在WSL下安装的,故需要配置端口转发
首先,获取debian的ip地址(powershell)
wsl ifconfig eth0
powershell管理员模式下添加端口映射:
# 添加配置: 本机监听5060端口,当有socket连接到5060端口时,本机就连接到172.26.90.29的connectport=5060端口,本机的5060端口可以接受的连接地址为"*",使用的协议为tcp,当前仅支持传输控制协议 (TCP)。
netsh interface portproxy add v4tov4 listenport=5060 connectaddress=172.26.90.29 connectport=5060 listenaddress=* protocol=tcp
查看所有映射
netsh interface portproxy show all
删除映射
netsh interface portproxy delete v4tov4 listenaddress=* listenport=5060
注意:使用软电话(eyebeam和Linphone)时,需要将协议改为tcp
可能需要打开防火墙,允许5060端口(不确定是否需要):
# add inbound rule(添加入站规则)
netsh advfirewall firewall add rule name= "WSL freeswitch" dir=in action=allow protocol=TCP localport=5060# add outbound rule(添加出站规则)
netsh advfirewall firewall add rule name= "WSL freeswitch" dir=out action=allow protocol=TCP localport=5060# reset(删除规则)
netsh advfirewall firewall delete rule name="WSL freeswitch"
相关文章:
在Debian上安装freeswitch
在Debian上安装freeswitch 说明: 首次发表日期:2024-08-12参考文档: https://medium.com/jogikrunal9477/ultimate-guide-to-installing-freeswitch-on-ubuntu-22-04-lts-3745ef6a6bd6https://developer.signalwire.com/freeswitch/FreeSWI…...
论文分享 | Fuzz4All: 基于大语言模型的通用模糊测试
大语言模型是当前最受关注的研究热点,基于其生成和理解能力,对现有领域在提升性能和效果上做更多尝试。分享一篇发表于2024年ICSE会议的论文Fuzz4All,它组合多个大语言模型以非常轻量且黑盒的方式,实现了一种跨语言和软件的通用模…...
VS Code 配置docker 管理员权限终端
问题描述 在容器中需要使用sudo或者su root时候,权限不够,被灵魂提问。 然而,镜像是官方发布的,翻遍了githubissues也没有找到password. 解决 Attach shell 在docker插件中,attach shell 可以直接获得shell。 所…...
使用Linux实现FTP云盘1
关于FTP服务器 FTP(文件传输协议)服务器是在互联网上提供文件存储和访问服务的计算机,它们依照FTP 协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。 程序运行,服务端不断接收客户端指令,服务 端可同时处…...
tombo resquiggle
Re-squiggle 算法 简介 纳米孔读取产生的电流信号水平数据称为squiggle。将这些squiggle信息进行基底呼叫通常与参考序列相比会包含一些错误。Re-squiggle算法定义了从squiggle到参考序列的新分配,即重新squiggle。 Re-squiggle算法是Tombo框架的基础。该算法输入包含原始信…...
vue3获取vue实例 并注册全局属性方法
vue3注册全局属性方法 前言一、app.config.globalProperties1 注册实例2 注册方法 二、依赖注入(Provide / Inject)1 注册实例2 注册方法3 一次性多次传入 最后 前言 在使用 Vue 时,多个地方使用同一个方法导致每个地方都需要按需引用&#…...
function calling后,如何让大模型进行自然语言输出?
在现代的自然语言处理(NLP)系统中,Function Calling 是指模型在对话过程中调用外部函数以获取特定数据或执行特定操作的能力。在 Function Calling 后,你可以将接收到的数据发送回大模型,并生成自然语言输出。以下是如…...
Android笔试面试题AI答之Kotlin(8)
文章目录 34.Kotlin 泛型中的“*”和“Any”有什么区别?Any*总结 35.Kotlin 协程在哪些方面优于 RxKotlin/RxJava?1. 语法简洁性和易读性2. 性能3. 错误处理和调试4. 场景适用性5. 学习和使用成本 36.Kotlin 协程中的 launch/join 和 async/await 有什么…...
LVS服务的搭建之NAT模式、DR模式的搭建实战
# LVS的概述 1/什么是LVS linux virtural server的简称,也就是linxu虚拟机服务器,使用lvs可以达到的技术目标是:通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群,他具有良好的可靠性࿰…...
Raft分布式存储
文章目录 前言一、项目大纲二、Raft模块1.Raft介绍2.大致内容Leader与选举日志同步、心跳raft日志的两个特点 3.主要流程1. raft类的定义关键函数m_nextIndex 和 m_matchIndex作用 2.启动初始化3.竞选leaderelectionTimeOutTicker:doElectionsendRequestVoteRequestVote 4.日志…...
【Linux】使用nm命令查看动态库包含的符号表
【Linux】使用nm命令查看动态库包含的符号表 文章目录 【Linux】使用nm命令查看动态库包含的符号表1. nm的简介2. nm的使用3. nm查找具体的函数名或变量名Reference 1. nm的简介 nm命令来自name的简写。nm命令常用于查看二进制文件中的符号表,通常用于静态库和可执…...
你还不知道苹果手机截长图的方法?4 种方法都可以
苹果手机截长图 先给大家介绍第一个苹果手机截长图的方法,如果你是在 Safari 浏览器中想要截图分享的话,浏览器截图自带可以截取全页的选项,让你实现截长屏的操作。首先找到你想要截取的网页,然后按下手机的电源按键以及音量按键…...
C++选择题带答案
1. 在定义成员函数时给出的成员函数的正确标记是 (1) 。 (a) <类名>.<函数名> (b) <类名>::<函数名> (c) <对象名>.<函数名> (d) <对象名>::<函数名> 2.以下关于函数指针的叙述中,正确…...
Unity动画模块 之 简单创建一个序列帧动画
本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 1.什么是序列帧动画 序列帧动画简单来讲就是通过连续播放一系列静态图像,形成动态视觉效果的过程ÿ…...
学会高效记录并整理编程学习笔记
文章目录 一、前言二、建议和方法2.1 明确笔记目的2.2 选择合适的工具2.3 结构化笔记2.4 高效记录技巧2.5 图文并茂2.6 定期回顾与整理2.7 利用搜索与链接2.8 分享与交流2.9 实践与应用 三、总结 一、前言 高效记录并整理编程学习笔记是提升学习效率和巩固知识的重要手段&…...
Llama 3.1中文微调数据集已上线,超大模型一键部署
7 月的 AI 圈真是卷完小模型卷大模型,精彩不停!大多数同学都能体验 GPT-4o、Mistral-Nemo 这样的小模型,但 Llama-3.1-405B 和 Mistral-Large-2 这样的超大模型让很多小伙伴犯了难。 别担心!hyper.ai 官网在教程板块为大家提供了…...
css实现太极图
<template><div><!-- 太极图 --><div class"all"><div class"left box"></div><div class"right box"></div><div class"black"><div class"inner_white"><…...
Android 13 移植EthernetSettings/Ethernet更新
移植EthernetSettings Android 13 在Settings搜索没有发现以太网设置,应该是移除了,但是客户的设备需要,所以移植Android 11的. 以太网相关的功能在Android13中进行模块化,提取到packages/modules/Connectivity/中, EthernetManager相关代码从framework移到packages/modules/…...
极狐GitLab 如何设置访问令牌前缀?
极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…...
leetcode日记(72)最大矩形
依旧是看了答案才知道大概方法…太难想到了 和上一道题思路相似!可以直接调用上题的函数,只不过调用前的准备非常难想到,就是建造形状相同的矩阵,第i行j列的元素是i行中j列前相邻的“1”的个数。 class Solution { public:int m…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
