FreeSWITCH
文章平均质量分 59
介绍FreeSWITCH维护与开发的点滴
云梦谭
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
FreeSWITCH 中的 <macro> 实现机制
macro>FreeSWITCH 的<macro>提供了一种高效、可维护的方式来构建可复用的语音提示逻辑模块。对于构建复杂的语音交互系统,合理设计 macro 结构可以显著提升代码整洁性和复用性,是每一个使用 FreeSWITCH 的开发者都应掌握的重要工具。如果你正在自定义 voicemail 模块、构建 IVR 系统,建议深入学习 FreeSWITCH 的<macro>和<say>用法,并结合调试工具(如和fs_cli)跟踪执行流程,以达到灵活、精细控制语音交互的目的。原创 2025-07-29 10:01:10 · 275 阅读 · 0 评论 -
Ubuntu系统下编译安装FreeSWITCH 1.10.12
则表示服务已成功启动。命令,查看运行状态。原创 2025-07-18 16:41:29 · 493 阅读 · 0 评论 -
GDB调试时打印通道变量
在 GDB 中打印链表时,可以通过逐步解开指针并打印每个节点的内容来查看链表的结构。在调试freeswitch时,有时候需要找到某个通道变量的值。怎么办呢?,这通常是一个链表结构,所以你需要逐层访问每个指针并查看它的内容。假设你已经有了channel和variables。原创 2025-03-18 03:00:00 · 279 阅读 · 0 评论 -
freeswitch通过uuid定位session并发送event
在 FreeSWITCH 的 C 代码中,可以通过。将其发送到指定的会话(session)。原创 2025-03-03 03:30:00 · 396 阅读 · 0 评论 -
FreeSwitch资源库
感谢杜老师的分享:GitHub - rts-cn/awesome-freeswitch: A curated list of awesome FreeSWITCH resources, modules, libraries and software. FreeSWITCH资源精选。原创 2024-03-16 15:54:31 · 411 阅读 · 0 评论 -
[转]WebRTC 人声检测与舒适噪音
早期版本的舒适噪音的格式定义在RFC 1890中,这个版本的格式只包含一个字段,就是噪音级别。舒适噪音生成器在接收端根据发送到给的参数,来产生类似接收端的舒适噪音, 用来模拟发送方的噪音环境。接收方在收到新的CN包后,会更新产生舒适噪音的参数。如果B具有VAD检测功能,那么B就可以在不说话的时候,发送特殊标记的语音流或者通过减少语音流发送的频率,来减少无意义语音的发送。除此以外,人声检测还能用于减少网络中语音包传输的数据量,从而极大的降低语音的带宽,极限情况下能降低50%的带宽。很少可能是两个人都说话的。转载 2024-01-27 13:32:32 · 702 阅读 · 0 评论 -
FreeSwitch发INVITE时怎么添加RURI参数
FreeSwitch发INVITE时怎么添加RURI参数原创 2023-01-01 08:00:00 · 1028 阅读 · 0 评论 -
FreeSwitch消息队列
FreeSwitch 消息队列转载 2022-07-29 10:14:25 · 644 阅读 · 0 评论 -
FreeSwitch的限流配置
FreeSwitch的限流配置原创 2022-07-15 08:58:53 · 1270 阅读 · 0 评论 -
FreeSwitch的docker部署
Docker部署FS是一种非常好的选择。而且FS本身就提供了支持。在FS源码包里,有一个名为docker的子目录:进入这个目录,可以看到三个子目录和一个说明文档README:base_image master README release进入master,看看它的Dockerfile:# vim:set ft=dockerfile:FROM debian:jessie# Source Dockerfile:# https://github.com/docker-libr原创 2022-05-31 18:03:08 · 2973 阅读 · 1 评论 -
FreeSwitch读帧代码走读
FreeSwitch 的switch_core_session_read_frame函数代码走读笔记。原创 2022-03-24 16:59:21 · 1227 阅读 · 2 评论 -
freeSwitch DISA实现
D.I.S.A. (Direct Inward System Access),是提供一种呼入平台转呼出的特性。注意这类特性的安全。摘录来自wiki的一个lua实例。dialplan:<extension name="disa"> <condition field="destination_number" expression="^disa$"> <action application="lua" data="disa.lua"/>...原创 2022-01-04 17:41:48 · 349 阅读 · 0 评论 -
FreeSWITCH的MRCP端口范围
FeeSwitch 的MRCP模块RTP端口配置。原创 2021-11-22 17:07:02 · 1825 阅读 · 0 评论 -
FreeSWITCH 1.10.7发布
FreeSWITCH 1.10.7发布FreeSWITCH 1.10.7版发新版本发布以及2021ClueCon大会即将开幕。https://mp.weixin.qq.com/s/L02iTFpaRmAQ_PAjg154LgFreeSWITCH 1.10.x Release notes - FreeSWITCH - Confluence很感谢杜老师的资源。从中学习了很多。...原创 2021-10-26 09:41:09 · 894 阅读 · 0 评论 -
FreeSwitch Originate API
FreeSwitch originate API的使用详解。原创 2021-10-25 17:07:08 · 3610 阅读 · 0 评论 -
FreeSwitch Inline Dialplan
在组织FreeSwitch的dialplan时,很多时候APP操作的是extension(比如说bridge或originate)。但是,在一些场景,我们又希望在代码里由嵌入另一段dialplan执行,而不是指定某个特定的extension,这时,inlinedialplan就派上用场了。1. 基本语法'app1:arg1,app2:arg2,app3:arg3' inline注意:单引号通常是必要的,但是,如果只执行一对简单的app:arg,是可以不带单引号的。比如:...原创 2021-10-08 09:35:41 · 1058 阅读 · 0 评论 -
FreeSwitch mod_dptools: playback
1.概述About playback的用途是在当前channel播放一个文件。 如果文件是MP3格式的,那么需要编译加载mod_shout模块。 可以用uuid_breakAPI命令打断文件的播放。2.用法<action application="playback" data="<sound-file-to-play>[@@<seek-offset>]"/> 参数 描述 实例 sou...翻译 2021-09-28 09:53:03 · 2544 阅读 · 1 评论 -
FreeSwitch uuid_bridge代码分析
uuid_bridge是个API调用。它的功能是把两个channel桥接在一起。 uuid_bridge是由mod_commands模块实现的。这个模块实现了很多API命令接口。首先从SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load)里找API的实现映射,即入口函数名uuid_bridge_function:跳转到函数的实现处:这个函数很短,关键调用就一个:switch_ivr_uuid_bridge。接下...原创 2021-09-22 09:01:36 · 1721 阅读 · 0 评论 -
uuid_broadcast用法
FreeSwitch的uuid_broadcast API,可以在指定的Channel上执行任意的APP,典型的比如播放一条插入的语音什么的。其参数的基本语法:"app::args" 。基本用法(播放语音,path指定文件路径): uuid_broadcast <uuid> <path> [aleg|bleg|both] 执行APP时,可以让在执行完APP后FS自动拆线,这时用!+hangup_cause描述,APP如果有参数,用两个冒...原创 2021-09-15 17:41:05 · 1998 阅读 · 2 评论 -
FreeSWITCH锁定协商好的codec
在呼叫持续期间,如果通话中的一方使用电话保持功能,会触发re-invite,由于某种原因,re-invite协商的结果,可能会和初始INVITE的协商结果不同。但是,在大部分场合里,我们是希望整个通话过程中,codec不要变化的。有没有什么解决办法呢? 为了达成目的,我们可以在同一context下添加一个extension:<extensionname="lock_codec"><conditionfield="destination_nu...原创 2021-08-03 15:37:12 · 829 阅读 · 0 评论 -
FreeSwitch与redis
FreeSwitch与redis相关的模块有两个,mod_redis和mod_hiredis。其中mod_redis实现一种后端呼叫限制的机制;而mod_hiredis则实现了配置和运行redis的一套接口。所以,后者完全能够实现前者的功能。1. mod_redis1.1编译安装 进入FreeSWITCH源码所在的目录modules.conf文件,确保mod_redis已经启用,然后执行以下命令编译:make mod_redis-install把r...原创 2021-07-22 15:44:45 · 1812 阅读 · 3 评论 -
freeSWITCH detect_speech源码分析
前段时间用detect_speech配合阿里的引擎做了些ASR的测试。涉及到一点源码的改动。这里记录detect_speech的源码。有助于理解FS的ASR实现。原创 2021-07-07 17:11:33 · 1465 阅读 · 1 评论 -
FreeSWITCH 对接阿里SDM(MRCP-SERVER)
1. 准备工作开通阿⾥云智能语⾳服务1. 注册阿⾥云账号;2. 到“智能语⾳交互服务”⻚⾯,点击『⽴即开通』,开通ASR/TTS相关服务https://data.aliyun.com/product/nls;测试账号是免费的,但并发路数有限2. 安装部署SDM按照阿里提供的文档《SDM(MRCP-SERVER)公共云镜像使⽤》部署就可以。3. FreeSWITCH安装配置3.1编译mod_unimrcp并安装打开,保证这一行打开asr_tts/mod_unimr原创 2021-06-28 13:59:32 · 3167 阅读 · 7 评论 -
mod_unimrcp配置
mod_unimrcp是FreeSWITCH实现媒体资源控制协议(MRCP)通信的模块。FS充当MRCP的Client端,与MRCPSERVER交互。MRCPV1使用RTSP协商,V2使用SIP。mod_unimrcp同时支持这两个版本。这里描述unimrcp的SIP交互的配置。 通过MRCP,可以实现ASR、TTS这类业务。mrcp_profiles MRCP profile定义了一个特定MRCPSERVER的通信配置。这个机制让FS可以和不同的...原创 2021-06-24 13:08:29 · 1997 阅读 · 1 评论 -
FreeSwitch 的Lua脚本与数据库
转至元数据结尾由Belaid Areski创建, 最终由Mike Jerris修改于2016.01.26转至元数据起始AboutLua scripts allow one to connect to databases and external resources.Two Lua options are available if you are developing a FreeSWITCH application interfacing with a DBMS.C...翻译 2021-06-15 17:49:30 · 1908 阅读 · 0 评论 -
FreeSwitch调试小技巧
Enabling SIP TracingAt fs_cli type:sofia loglevel all 9sofia global siptrace onLog LevelEdit console.conf.xml<param name="log_event" value="DEBUG"/> <param name="all" value="DEBUG"/>Edit switch.conf.xml (especially if you have.原创 2021-06-07 16:54:37 · 1324 阅读 · 0 评论 -
FreeSwitch的正则表达式实例
https://freeswitch.org/confluence/display/FREESWITCH/Regular+Expression1 摘要 本文列举一些便利的正则表达式。在FreeSwitch的世界里,正则表达式的身影随处可见。这份文档里有很多实例,说明XML拨号方案的条件表达式里是怎样使用正则表达式的,有兴趣的话可参考。2 值的获取 圆括号里的模式匹配时,其值会按顺序转储到变量里,变量名$1, $2......而变量$0包含完整的p...翻译 2021-05-25 09:07:42 · 3138 阅读 · 0 评论 -
如何通过CLI获取Freeswitch的某个channel的通道变量列表
在FS的二次开发过程中,通道变量扮演极其重要的角色。那么,有没有办法实时获取通道变量的值呢? FS提供了一个app,叫info,可以在dialplan时获取通道变量信息。 用法用于当前leg:<actionapplication="info"/>用于bleg:<actionapplication="set"data="bridge_pre_execute_bleg_app=info"/>用在lua脚本...原创 2020-11-30 09:12:56 · 2830 阅读 · 4 评论 -
FreeSwtich的监听功能
FreeSwitch提供了一个APP实现通道的监听功能,它的名字是:eavesdrop。如果要持续监听某个用户,那么要用mod_spy里实现。用法Usageeavesdrop [<uuid>|all]相关通道变量<actionapplication="set"data="eavesdrop_require_group=<groupID>"/><actionapplication="set"data="ea...原创 2020-10-26 08:54:20 · 4019 阅读 · 1 评论 -
openresty配置自签证书供Freeswitch https连接
HTTPS需要的证书,必须是认证机构颁发的,但是在开发环境下,注重实践,也不一定拥有证书对应的域名,那么可以用openssl生成,自己给自己颁发一个证书!1. openssl的版本信息# openssl versionOpenSSL 1.1.1c FIPS 28 May 20192. openresty的版本信息# /usr/local/openresty/nginx/sbin/nginx -vnginx version: openresty/1.17.8.23. ...原创 2020-09-28 17:39:35 · 914 阅读 · 0 评论 -
FreeSWITCH背后的故事(译)
http://www.dujinfang.com/2009/10/31/freeswitchbei-hou-de-gu-shi.html本文原是是Anthony Minessale写的。杜金房先生翻译的。个人认为对研究FS还是有借鉴意义,转载于此。[freeswitch] 本文由Anthony Minessale写于2007年5月。来自www.freeswitch.org。翻译它是因为我觉得永远都不会过时... --Seven 我开发FreeSWITCH已经近两...转载 2020-06-28 10:07:15 · 791 阅读 · 1 评论 -
FreeSwitch 的Ring group功能
FreeSwtich安装完毕之后,自带Ring group功能。拨号方案 <extension name="call-group-simo"> <condition field="destination_number" expression="^82(\d{2})$"> <action application="bridge" data="{leg_timeout=15,ignore_early_media=true}...原创 2020-06-17 16:35:08 · 2058 阅读 · 5 评论 -
利用mod_lua实现动态配置FreeSwtich
FreeSwtich默认的配置体系是XML文件,修改配置后需要reloadxml生效。这对于大型线上系统,是不可接受的。FreeSwitch本身提供了几种不同的动态配置接口,比如mod_xml_curl,本文介绍利用mod_lua动态配置FS的方法。 通过mod_lua模块,你可以利用lua实现动态配置。绑定一个脚本处理XML请求,就像mod_xml_curl那样,动态地把所需要的XML片段喂给FS,指示FS的执行。实现应用与数据的分离。FreeSWITCH需要某种XML信...原创 2020-06-15 17:07:45 · 2959 阅读 · 5 评论 -
CentOS FreeeSwitch安装后处理
文件权限设置 一般情况下,我们经常用root用户编译安装FS。并用root用户运行FS。 基于安全考虑,我们安装完毕后,还是需要配置一下,建立一个FS专属的运行用户。执行下面脚本post_install_fs.sh:#!/bin/bash # create user 'freeswitch'# add it to group 'freeswitch'# change owner and group of the freeswitch i...原创 2020-06-01 09:25:40 · 412 阅读 · 0 评论 -
FreeSwitch呼出流程分析
为了简单起见,用下面的fs cli命令发起一路单边外呼:originate sofia/192.168.1.8/1000 &playback(ivr/8000/ivr-welcome_to_freeswitch.wav) 注意连接串写的是sofia/192.168.1.8/1000,直接指定sofia的具体profile,而不是用user/1000,因为后者是个虚拟的逻辑概念,定位过程中会引入originate的递归调用,增加复杂度。endpoint_in...原创 2020-05-25 08:58:56 · 2643 阅读 · 2 评论 -
FreeSwitch呼入处理流程
为了简单起见,本文分析一个单边呼叫。让终端呼入到FS,然后播放一个文件就退出,不执行FS的呼出动作。参考拨号方案: <extension name="fs_one_way_inbound"> <condition field="destination_number" expression="^10086$"> <action application="sleep" data="1000 "/> <...原创 2020-05-20 08:45:39 · 2679 阅读 · 1 评论 -
FreeSwitch状态机静态接口分析
本文从静态数据结构的视角描述FreeSwitch的状态机。 FreeSwitchcore实现了一个有限状态机。每一路呼叫的一条腿,都由一个状态机实例维护。状态机定义接口在freeswitch-1.8.7\src\include\switch_types.h文件中/*! \enum switch_channel_state_t \brief Channel States (these are the defaults, CS_SOFT_EXECUT...原创 2020-05-19 13:03:19 · 1464 阅读 · 0 评论 -
FreeSwitch Sofia模块加载过程
上时序图:原创 2020-05-14 17:12:01 · 961 阅读 · 1 评论 -
FreeSwitch模块加载过程
本文基于FreeSwitch V1.8.7分析。 首先是模块接口定义: 类型定义:接口定义于\freeswitch-1.8.7\src\include\switch_types.htypedef struct switch_loadable_module_function_table { int switch_api_version; switch_module_load_t load; switch_module_shutdown_t s...原创 2020-05-13 17:14:29 · 882 阅读 · 0 评论 -
CentOS8 安装FreeSwitch的RPM源设置
FS官方在1.6版本时,针对CentOS7有一个依赖解决方案的,在CentOS 7 64位也是可以工作的。不过似乎没有找到CentOS8的。感谢大神提供的另一个源,可以解决大部分需要的依赖包,减少大部分自己编译的工作: https://okay.network/blog-news/rpm-repositories-for-centos-6-and-7.html...原创 2020-05-12 09:58:26 · 1434 阅读 · 0 评论
分享