
FreeSWITCH
可为山
这个作者很懒,什么都没留下…
展开
-
碰到的 MRCPv2 串线以及解决思路
todo原创 2025-04-29 17:52:49 · 271 阅读 · 0 评论 -
FreeSWITCH bridge 时自动补偿静音
bridge_generate_comfort_noise原创 2025-04-11 15:52:33 · 112 阅读 · 0 评论 -
FreeSWITCH testserver 测试
用这个跟 Fs 官网对照着看,是不是就明白很多了。eyebeam 挂机,同时结束 tcpdump。用 wireshark 打开 esl.pcap。蓝色部分是 testserver 发给 Fs。红色部分是 Fs 发给 testserver。eyebeam 注册,再呼叫 9196。原创 2025-03-31 13:20:01 · 265 阅读 · 0 评论 -
docker-compose.yml 增加 extra_hosts
再定义一个全局变量, sip_gethostbyname=true。进到容器,`cat /etc/hosts`,正是上面配置的内容。现在配置一个向 IMS 注册的 Fs 网关,就易如反掌了。原创 2025-03-24 13:43:54 · 237 阅读 · 0 评论 -
FreeSWITCH 禁止显示 ‘Outbound Call‘
send-display-update=false # 上面不改,只改这个试试。如果是通过网关呼出,在网关配置里面设置通道变量,这个办法更好。allow-update=false # 改这个肯定可以。可以设置通道变量 sip_cid_type=none。另外,联调时有时远端不喜欢。多读书多试试,每天进步一点点。原创 2025-03-05 12:47:22 · 197 阅读 · 0 评论 -
FreeSWITCH Alpine 安装
FreeSWITCH 版本为 1.10.11,还不错。但比较遗憾,没有 mod_av 模块。mod_lua 基于 lua5.3。先更新 Alpine 仓库。原创 2025-02-21 17:05:37 · 273 阅读 · 0 评论 -
记录一次 ALG 的处理过程
如果 FS 不发 SIP 消息,从 FS 一侧 telnet mccp-server-ip 1544 (mrcp 侦听端口) 是正常的。经过反复沟通之后,给我一幅图,SIP 呀,H.323 呀,TFTP 呀,问我哪些需要 disable;而 FS 发了 SIP 消息之后,再 telnet 就失败,卡了大约 1 分钟之后,telnet 才能恢复正常。等问题复现时,在 FS 一侧做 路由测试,发现卡在某一跳,当然是查这里的 ALG。前几天朋友找我帮忙,说碰到很大困难了,实际上,不过如此。原创 2025-02-21 09:39:42 · 172 阅读 · 0 评论 -
测试 FreeSWITCH 的 sip_invite_route_uri
剩下的就很简单了,配置 kamailio/opensips,用 sip proxy 修改 sip 头。FreeSWITCH 很强很方便,只要用心,就能找到解决问题的办法。# 修改主叫号码(取 Route 头里面的 user)但想修改 sip 头,有什么好办法呢?(比如修改主叫号码等)# 删除某些 sip 头(视情况而定)# 如果不是 INVITE, 那么返回。# 如果没有 Route 头,那么返回。也就是 fs->sip proxy->落地。# 这就是预加载路由。原创 2025-02-20 21:42:39 · 290 阅读 · 0 评论 -
play_and_detect_speech 怎么接收 dtmf
但这需要 mrcp server 支持,但目前 sdm 是不支持 dtmf 的。FS 的 play_and_detect_speech 可以接收 dtmf。多个 dtmf 要怎么接收,我搞不定,如果您知情请不吝赐教。FS 本身貌似只能接收一个,处理不了多个。传了个内置的 mrcp 语法。但貌似只能接收一个码。原创 2025-02-08 10:32:11 · 137 阅读 · 0 评论 -
FreeSWITCH 的 mod_fail2ban
对待挑战失败要慎重一点,可以针对 IP 进行计数,累计几次失败之后可以禁止这个 IP。--->invite(seq: n+1),如果这个请求超时还没有收到,那么 fs 就会 fire wrong_call_state。这个处理很简单,直接禁止就行。user_agent 如果包含了 friendly-scanner,或者包含了 VaxSIPUserAgent 等,大概率是来自国外的 SIP 扫描。所谓 register_attempt,就是 fs 收到注册请求(初始请求)时 fire 这个事件。原创 2025-02-08 09:51:00 · 256 阅读 · 0 评论 -
FreeSWITCH 删除过期的录音文件
放 cron, 每天自动执行。原创 2025-02-06 17:02:56 · 368 阅读 · 0 评论 -
FreeSWITCH 跟踪内存泄漏
做几个呼叫,然后 shutdown。最后分析 /tmp/vg.log。原创 2025-02-06 14:59:50 · 133 阅读 · 0 评论 -
FreeSWITCH 的 SLA
不过我还没实际测试过,如果有 NAT 方面的问题,估计不好搞,即使我已经工作了很多年。原创 2025-02-02 09:05:40 · 180 阅读 · 0 评论 -
H.323 转 SIP 之我见
H.323 转 SIP,一般是为了设备利旧,思科/AVAYA 等大厂 的 H.323 早就部署了 N 套。FreeSWITCH 有 mod_h323 模块,但已经好多年不更新了,我做过压力测试,会 crash。听说还有不开源的 mod_ooh323,支持视频,这个特性特别好,但有时也会 crash。我有一套 YATE 5 年前就上线了,480 个通道的并发,一直比较稳定。我自己习惯使用 Yate,把 H.323 转成 SIP。如果想讨论这方面的问题可加 1052294031。原创 2025-01-21 08:58:45 · 276 阅读 · 0 评论 -
FreeSWITCH 呼出成功后自动执行 uuid_debug_media
不去做这个检查 `!rtp_session->flags[SWITCH_RTP_FLAG_RESET]`, 似乎更好一些。如果已经 bridged, 那么 send_msg 不为空,将不会调用 get_next_write_ts。如果是单腿,那么 send_msg 为空,将调用 get_next_write_ts 函数。个人觉得,某些情况下可能会有问题(目前还不十分确定)在跟踪一个rtp方面的bug。原创 2025-01-16 10:36:01 · 256 阅读 · 0 评论 -
FreeSWITCH rtp session 的初始化
rtp原创 2025-01-10 16:53:43 · 167 阅读 · 0 评论 -
测试 FreeSWITCH 的 disable_q850_reason
1002 和 1003 都注册到 FreeSWITCH。1003 正常应答,sip 流程跟以前一样。现在 1002 呼叫 1003。原创 2025-01-08 15:17:52 · 324 阅读 · 0 评论 -
试试 FreeSWITCH 的 tone2wav
dtmf1234.wav 不要写成 dtmf-1234.wav,但可以写成 dtmf_1234.wav。-R8000 速率8000,但不要写成 -R 8000,加上空格就不能工作了。'tone_stream://1234' TGML,可以查看相关文档。`tonestream://` 可以忽略掉。SIPp 可以播放 wav,是不是很方便?tone2wav,不带任何参数,看帮助。-s Stereo 默认是 Mono。-v verbose,打印详细日志。同上,但音量为 -5。原创 2025-01-08 14:41:41 · 856 阅读 · 0 评论 -
FreeSWITCH 呼出之我见
uuid varchar channel-uuid,如果为空,那么调用 fs_cli -x 'create_uuid'4 个 SIP Profile,其中每个 Profile 对应一个网关,所有的这些网关都指向同一个语音网关。换我上的话我肯定用 Kamailio,控制起来比较方便。如果当前 channels 数超过某个阈值,则退出。调用 fsapi 呼出,并写回数据库的表。如果当前 sps 超过某个阈值,则退出。fs --- 语音网关 --- 运营商。语音网关 5060 --- 运营商。原创 2025-01-06 18:16:54 · 142 阅读 · 0 评论 -
FreeSWITCH 的 soa 问题
soa原创 2025-01-06 11:02:26 · 726 阅读 · 0 评论 -
比较 FreeSWITCH 的 asr 事件和回调函数
这种做法是调用 switch_core_session_queue_event 直接给 session 发事件。识别到结果之后可以收到 DETECTED_SPEECH 事件。用 lua 来描述,是这样的。这种搞法是收不到事件的。原创 2025-01-02 16:49:51 · 579 阅读 · 1 评论 -
FreeSWITCH dialplan/default.xml 之释疑
todo原创 2025-01-02 12:01:45 · 495 阅读 · 0 评论 -
跟踪一例 FreeSWITCH 语音单向的案子
如果执行 dialplan2, 那么语音网关先收到 FS 发过来的 RTP 包,重点是收到的 RTP 包其源地址是 FS 的本机地址 192.168.1.200, 而不是 FS 出口地址 192.168.1.100,于是语音网关自动发到 了192.168.1.200,但这个地址是不能达的,结果导致了语音单向。语音网关 10.x.x.x --------- FS 出口地址 192.168.1.100 ------- FS 本地地址 192.168.1.200。-- FS 回的是正确的 C 地址-->原创 2024-12-31 10:46:29 · 173 阅读 · 0 评论 -
FreeSWITCH 发送 SIP Message 怎样指定 Proxy
我之前写过一篇文章, 终端注册请求发到 OpenSIPS, 后者加 path 头之后 relay 到 Fs。Fs 呼叫终端是没问题的,但 Fs 通过 chat 给终端发 SIP Mesage 可要了命了,直接出错。留意 contact-uri, to-uri, and from-uri。查到一篇文档,按我现在的理解,要 fire 这样一个 event。可查下官方 mod_event_socket 的相关资料。chat 肯定不行,不支持 sip proxy。那这问题到底要怎样解决呢?原创 2024-12-18 19:07:18 · 220 阅读 · 0 评论 -
简单记录一下 Debian12 安装 FusionPBX 要点
里面有很多 git clone 的命令可能不容易成功,可以先找到一台香港阿里的服务器,把 spandsp 等 clone 下来,再复制到本机的 /usr/src 目录,这样成功率就会高很多。至于 switch_version,默认就是 1.10.12 ,个人觉得 FreeSWITCH 1.10.12 就很好,不建议改动。下一步可以找到 install.sh ,个人觉得分开安装可能更容易成功。今天试了下安装,简单记录了一下,这些东西对新手来说,可能确实有难度。下面的配置可以根据需要进行修改。原创 2024-12-14 21:32:00 · 517 阅读 · 0 评论 -
FreeSWITCH 用 update 刷新会话而不是用 re-invite
还有一个办法应该更好一些,在协商 session-timer 的时候,set 下 update_refresh, 但暂时不清楚到底怎么搞。nua_stack.c 里面调用 nua_stack_set_defaults()今天重新测试了一下,发现不需要修改任何源码,单纯设置就可以。但其实还有一个未解决的问题,就是哪边刷。sofia 要怎样设置,现在不知道。找到 nua_params.c。人生的意义在于不断折腾。这里应该有2个解决办法。原创 2024-12-04 20:30:33 · 344 阅读 · 0 评论 -
FreeSWITCH absolute_codec_string 测试
这纯属歪打正着,写错了,加了下划线,但居然生效,很奇怪,但结果就是如此;这估计属于 hack。设置 sip_invite_domain,同时设置 precense_id,中间用冒号隔开。结果只有一个 media(audio),H264 并不生效。`multiset ^^:a=1 b=2` 这样写应该可行。音频+视频,加了斜杠之后 H264 就生效了。但本人不是太习惯这种写法。原创 2024-12-04 10:52:16 · 559 阅读 · 0 评论 -
FreeSWITCH inline dialplan
2. sip profile 我们一般配置 <param name="dialplan" value="XML"/>3. uuid_transfer 一般是 transfer 到路由(xml dialplan)其实就是不再需要 xml dialplan。先执行 set a=1 这个 app。最后执行 playback。再执行 set b=1。原创 2024-12-04 09:53:55 · 218 阅读 · 0 评论 -
JsSIP 部署以及 Nginx/FreeSWITCH 等相关配置
JsSIP原创 2024-12-02 09:16:43 · 223 阅读 · 0 评论 -
FreeSWITCH rtp_force_video_fmtp 测试
rtp_append_video_sdp,这个含义很明显,增加而已,应该是增加属性,不去修改 profile-level-id等。profile-level-id 变了,打包模式变了,属性可以增加,但 payloadtype 不能变。可以看出来,payloadtype 不变,profile-level-id 不变,打包模式也不变。rtp_video_fmtp,这个叫 pass_fmtp,回头专门测试下。rtp_append_audio_sdp,我之前写过一篇文章。终端: MicroSIP 3.21.4。原创 2024-11-30 10:38:18 · 344 阅读 · 0 评论 -
FreeSWITCH 之数据库设置
之后,找到 sip_profile 的 odbc-dsn,修改之后,再重启,看到的是这些表。1. switch.conf.xml 的 core-db-dsn, 这是核心数据库。2. sip_profile 的 odbc-dsn,主要保存注册用户的位置信息。再之后编辑 switch.conf.xml 的 core-db-dsn,这一行。之后,编辑 pre_load_modules.conf.xml,就是这一行。上面讲的这些都需要比较新的版本(1.10.x),1.6.x 肯定不行。当然更推荐使用 pg。原创 2024-11-27 15:25:12 · 536 阅读 · 0 评论 -
FreeSWITCH 呼入呼出编码混合
如果需要呼入呼出编码混合起来,那么 media_mix_inbound_outbound_codecs 设置为 true默认值为 false,这样的话呼出就是单个编码,很容易导致 488 被远端拒绝比如:jssip ---Fs bridge 落地网关jssip 首编码为 opus, Fs 如果已经 load 了 mod_opus, 那么 Fs 呼出时只有 opus 这一个编码 ,但很多语音网关可能不支持 opus ,回 488原创 2024-11-25 15:07:27 · 166 阅读 · 0 评论 -
FreeSWITCH 的 SRTP
AEAD_AES_256_GCM_8 是加密套件,还有加密的 key。其中 RTP/SAVP 表示媒体 SRTP 加密。原创 2024-11-25 09:10:10 · 279 阅读 · 0 评论 -
FreeSWITCH 的视频升降级双腿联动
设置 rtp_pass_codecs_on_stream_change 为 true 就好了(默认为 false),如果 legb 升级为 视频,那么 lega 也马上升级为视频。FreeSWITCH 是 b2bua server, uac 和 uas 都同 FreeSWITCH 协商。Kamailio 是 sip proxy, uac 跟 uas 协商。原创 2024-11-25 09:06:11 · 171 阅读 · 0 评论 -
FreeSWITCH JSON API
- 有 session 可以这样写。-- 没有 session。原创 2024-10-24 15:16:41 · 469 阅读 · 0 评论 -
关于 FreeSWITCH mod_sofia 注册过期时间的测试
如果服务器设置的随机数没有过期,就不用再挑战了,直接回 200 OK。2. 11:58:01 同 11:56:12 之间大致相差 110秒, Eyebeam 尊重 Fs 的选择,而不是固执地使用自己 30 秒的设置。请留意,Fs 回应的 Expires 为 120,Expires 放到了 Contact 的参数里面(这是标准做法)测试结果为:Eyebeam 续注册的时间大约为 110 秒,尊重了 Fs,只提前了一点点。请留意,Expires 为 30,是一个独立的 SIP 头。原创 2024-10-18 20:17:04 · 575 阅读 · 0 评论 -
FreeSWITCH mod_oreka 测试
接下来, FreeSWITCH 收到 rtp 包之后,往 192.168.31.166 的 24278 端口转发 rtp,但编码是写死的,mu-law。呼叫结束时,FreeSWITCH 向 192.168.31.166 发 bye。FreeSWITCH 地址是192.168.31.66。有了上面这些信息,是不是可以做一个录音服务器?FreeSWITCH 版本是 1.10.7。留意 audio 的端口是 24278。简单测试了下这个模块,还没仔细研究。OS 是 CentOS7。估计还有很多细节有待发掘。原创 2024-10-18 18:28:08 · 474 阅读 · 0 评论 -
关于 FusionPBX
resources/config.sh ,可以修改下,重点是修改 switch_token,这样就不用源码编译了,应该快很多。尽管我为几个人解决过 FusionPBX 方面的问题,但依靠的是 FreeSWITCH 方面的知识积累。没发现特别合适的,要不就是太旧,要不就是很新,但没有合适的说明。如果 Debian 服务器在境外,很容易安装,但...,不讲了。对于 FusionPBX,我了解不多,国内有人用,但不多。其他组件应该很容易安装,除了 FreeSWITCH。查了下,会员每月都要付费,不便宜。原创 2024-10-16 20:01:57 · 389 阅读 · 0 评论 -
FreeSWITCH 优化 mod_sofia,以便提高 REGISTER 的处理能力
4. sip ua 的注册周期不要设置太短,本人觉得 300 到 3600 之间都可以(有朋友设置为 60,这不合适)2. 用户位置推荐保存到 pg或者mysql(mariadb),不推荐 sqlite。如果需要把用户位置保存到 mysql,那么打开 mod_mariadb。3. mod_sofia 改一处代码,执行 sql 不再加锁。经过这样优化之后,处理 5000个 用户的注册,应该没有问题。重点是不要用默认值,用户位置不要保存到 sqlite。如果是pg或者mysql, 这里就不要再加锁和解锁了。原创 2024-10-14 20:29:43 · 306 阅读 · 0 评论 -
CentOS7.9 安装 okay 的 FreeSWITCH
或者 yum install -y freeswitch-config-vanilla,安装 fs 的配置文件。运行 freeswitch -nonat, 或者 systemctl restart freeswitch。接着把 fs 的配置文件复制到 /etc/freeswitch/第一个 shell,更换 yum 源。运行完第二个脚本之后。原创 2024-10-10 16:24:13 · 473 阅读 · 0 评论