- 博客(331)
- 收藏
- 关注
原创 FreeSWITCH testserver 测试
用这个跟 Fs 官网对照着看,是不是就明白很多了。eyebeam 挂机,同时结束 tcpdump。用 wireshark 打开 esl.pcap。蓝色部分是 testserver 发给 Fs。红色部分是 Fs 发给 testserver。eyebeam 注册,再呼叫 9196。
2025-03-31 13:20:01
254
原创 docker-compose.yml 增加 extra_hosts
再定义一个全局变量, sip_gethostbyname=true。进到容器,`cat /etc/hosts`,正是上面配置的内容。现在配置一个向 IMS 注册的 Fs 网关,就易如反掌了。
2025-03-24 13:43:54
121
原创 FreeSWITCH 禁止显示 ‘Outbound Call‘
send-display-update=false # 上面不改,只改这个试试。如果是通过网关呼出,在网关配置里面设置通道变量,这个办法更好。allow-update=false # 改这个肯定可以。可以设置通道变量 sip_cid_type=none。另外,联调时有时远端不喜欢。多读书多试试,每天进步一点点。
2025-03-05 12:47:22
191
原创 rtpengine build mr12.5.1 镜像
现在 rtpengine-ctl 可以用了。不过, build 出来有点大。回头研究下 alpine。
2025-02-24 19:18:14
226
原创 FreeSWITCH Alpine 安装
FreeSWITCH 版本为 1.10.11,还不错。但比较遗憾,没有 mod_av 模块。mod_lua 基于 lua5.3。先更新 Alpine 仓库。
2025-02-21 17:05:37
259
原创 记录一次 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
164
原创 测试 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
275
原创 rtpengine and redis
redis 用来在不同 rtpengine 实例之间同步会话信息。其中之一是陶宇飞的演讲稿,致敬陶女士!回头做做测试,看下到底怎么用。
2025-02-20 09:46:39
160
原创 介绍 Kamailio 的 kamcmd
kamcmd ,或者 kamcmd -s unix:/run/kamailio/kamailio_ctl。Kamailio 的 kamcmd 作用跟 FreeSWITCH 的 fs_cli 类似,kamailio.cfg 可以增加 xhttp.so 以及 xhttp 路由的路由处理。前者调用 kamailio 核心的 rpc 或者kamailio 模块的 rpc。Kamailio 早期版本也支持 MI,文档说现在不再支持 MI 了。其实还有很多命令,kamcmd help ,看下哪些对自己有用。
2025-02-19 11:42:15
100
原创 聊聊 sngrep 的配置
F8], 再 Save,这样就有一份配置文件了,文件名就是 ~/.sngreprc。[F10],再 Save, 配置文件增加了新的内容。
2025-02-13 10:28:21
164
原创 play_and_detect_speech 怎么接收 dtmf
但这需要 mrcp server 支持,但目前 sdm 是不支持 dtmf 的。FS 的 play_and_detect_speech 可以接收 dtmf。多个 dtmf 要怎么接收,我搞不定,如果您知情请不吝赐教。FS 本身貌似只能接收一个,处理不了多个。传了个内置的 mrcp 语法。但貌似只能接收一个码。
2025-02-08 10:32:11
124
原创 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
246
原创 Kamailio 迷你镜像
这样 build 出来的 Kamailio 应该是最小的,不到 60 兆。Debian 可以添加 packagecloud 仓库。目前 Kamailio 的版本是 5.8.4。有个 shell 脚本可以自动完成这个事情。基于 alpine 的镜像体积比较小。CentOS 似乎也行,但我没测试过。支持 x86 和 arm 架构。
2025-02-03 11:11:32
131
原创 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
248
原创 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
230
原创 Kamailio dlg_bridge
所谓 bridge 应该是 Kamailio 先呼通一个,成功后再发 refer |到另外一个。在 xhttp 路面里面调用 dlg_bridge, 应该是实现了点击拨号的功能。坦白讲,要完全调通可能还有很多细节需要注意,可能还要修改源码。逻辑不复杂,但能不能做成功还不清楚,以后有机会试试。
2025-01-15 09:09:53
387
原创 测试 FreeSWITCH 的 disable_q850_reason
1002 和 1003 都注册到 FreeSWITCH。1003 正常应答,sip 流程跟以前一样。现在 1002 呼叫 1003。
2025-01-08 15:17:52
321
原创 试试 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
854
原创 Kamalio 的 $nh(key)
JSSIP 跟 Kamailio 之间的 WSS 链接断开了(可能因为某种原因),JSSIP 会在 2 秒之后自动注册。Kamailio 发 BYE 给 JSSIP,正常情况下是发不到的,那怎么办呢?本文仅仅给一个思路,切勿原文照抄,多查文档多做练习多思考,方为上策。JSSIP 呼叫 Kamailio,应答。JSSIP 注册到 Kamailio。
2025-01-08 10:52:33
314
原创 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
136
原创 sniff2sipp: 把 pcap 处理成 sipp.xml
到这里下载:先安装依赖:测试一把:cd samplessniff2sipp -a 172.16.178.128:5060 -f call.cap,看到的是:
2025-01-03 15:52:46
448
原创 比较 FreeSWITCH 的 asr 事件和回调函数
这种做法是调用 switch_core_session_queue_event 直接给 session 发事件。识别到结果之后可以收到 DETECTED_SPEECH 事件。用 lua 来描述,是这样的。这种搞法是收不到事件的。
2025-01-02 16:49:51
544
2
原创 跟踪一例 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
163
原创 MicroSIP 之配置
SIP Server` 到底是何方神圣,试着改为 `192.168.99.206`,结果只是 `Request Domain` 从 `demo1.com` 变成了 `192.168.99.206`, `From Domain` 和 `To Domain` 没有变化,依旧是 `demo1.com`。有些字段很容易理解,比如 Username 和 Login 可以不同,Login 其实是 Authorization ID,如果跟 Username 相同,可以不配置。
2024-12-30 10:39:22
522
原创 FreeSWITCH 异步播放 wav 文件
1. lm 循环播放,在 lega 上执行 dispace,lega & legb 互相可以听到,lega 听到 legb的同时 还能听到 wav 文件, 但 legb 听不到 wav。2. lrw 循环播放,lega 和 legb 互相听不到,但都听到同一个 wav 文件。此外,用 local_stream://moh 代替 wav 文件名,没问题。4. f,first, 设置成第一个 media bug,估计很少有人用。2. m,mute ,在以前通话的基础上叠加 wav 文件。
2024-12-20 09:30:46
358
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人