freeswitch 32秒自动挂断问题

2024-08-23 14:12

本文主要是介绍freeswitch 32秒自动挂断问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

freeswitch 32秒自动挂断问题

说明:

  • 首次发表日期:2024-08-23
  • 参考:
    • https://serverfault.com/questions/1008661/freeswitch-drops-calls-after-32-seconds
    • https://blog.csdn.net/qq_32110203/article/details/141126033
    • https://stackoverflow.com/questions/73708045/freeswitch-outbound-calls-dropping-after-about-30-seconds-due-to-ack-timeout

回顾一下SIP呼叫流程:

  • 主叫向被叫发送INVITE消息请求建立SIP会话
  • 被叫回复100 Trying消息,表示收到请求了
  • 然后被叫电话开始振铃,并回复180 Ringing通知主叫我这边开始振铃了
  • 被叫这边有人接了电话,被叫发送200 OK消息给主叫
  • 主叫收到200 OK消息后,向被叫回复ACK消息以作证实
  • 现在,主叫和被叫已经开始通话了,通话语音是通过SIP之外的RTP包传递的
  • 最后,一方挂断电话并向另一方发送BYE消息,另一方收到消息后回复200 OK消息
  • 通话完毕。

使用sngrep抓包:

sudo apt-get install sngrep
sudo sngrep

打电话,等自动挂断后,进入查看最新的记录:

┬─────────          ──────────┬─────────          ──────────┬
│        INVITE (SDP)         │                             │
│ ──────────────────────────> │                             │
│                        100 Trying                         │
│ <──────────────────────────────────────────────────────── │
│                        180 Ringing                        │
│ <──────────────────────────────────────────────────────── │
│                       200 Ok (SDP)                        │
│ <──────────────────────────────────────────────────────── │
│                            ACK                            │
│ ────────────────────────────────────────────────────────> │
│                            BYE                            │
│ ────────────────────────────────────────────────────────> │
│                          200 Ok                           │
│ <──────────────────────────────────────────────────────── │

发现ACK部分是红色的,移动向下方向键到ACK,可以看到:

ACK sip:1001@192.168.31.23:55778;transport=tcp SIP/2.0
Via: SIP/2.0/TCP 113.83.194.236;branch=z9hG4bKvKUDev3DQ7a0H
Max-Forwards: 70
From: "Extension 1009" <sip:1009@192.168.31.25>;tag=atey5H2BZB78Q
To: <sip:1001@192.168.31.23:55777;transport=tcp>;tag=yMlYjfV
Call-ID: 102cf5a8-db9c-123d-ecbb-00155d006606
CSeq: 87636657 ACK
Contact: <sip:mod_sofia@113.83.194.236:5060;transport=tcp>
Content-Length: 0

可以看到主叫向被叫发送的ACK消息中,Contact的IP地址并非本地IP地址,因此导致被叫接受不到消息,ACK事务超时(默认32秒)后,主叫向被叫发送BYE消息来挂断电话。

解决方案:

修改 /etc/freeswitch/sip_profiles/internal.xml

    <param name="ext-rtp-ip" value="$${external_rtp_ip}"/><param name="ext-sip-ip" value="$${external_sip_ip}"/>

将其注释,然后添加修正:

    <param name="ext-rtp-ip" value="$${local_ip_v4}"/><param name="ext-sip-ip" value="$${local_ip_v4}"/>

将传输协议从TCP修改为UDP协议可能有用。

这篇关于freeswitch 32秒自动挂断问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099606

相关文章

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

Linux部署中的文件大小写问题的解决方案

《Linux部署中的文件大小写问题的解决方案》在本地开发环境(Windows/macOS)一切正常,但部署到Linux服务器后出现模块加载错误,核心原因是Linux文件系统严格区分大小写,所以本文给大... 目录问题背景解决方案配置要求问题背景在本地开发环境(Windows/MACOS)一切正常,但部署到

MySQL磁盘空间不足问题解决

《MySQL磁盘空间不足问题解决》本文介绍查看空间使用情况的方式,以及各种空间问题的原因和解决方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录查看空间使用情况Binlog日志文件占用过多表上的索引太多导致空间不足大字段导致空间不足表空间碎片太多导致空间不足临时表空间

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页

Java中InputStream重复使用问题的几种解决方案

《Java中InputStream重复使用问题的几种解决方案》在Java开发中,InputStream是用于读取字节流的类,在许多场景下,我们可能需要重复读取InputStream中的数据,这篇文章主... 目录前言1. 使用mark()和reset()方法(适用于支持标记的流)2. 将流内容缓存到字节数组

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

解决Failed to get nested archive for entry BOOT-INF/lib/xxx.jar问题

《解决FailedtogetnestedarchiveforentryBOOT-INF/lib/xxx.jar问题》解决BOOT-INF/lib/xxx.jar替换异常需确保路径正确:解... 目录Failed to get nested archive for entry BOOT-INF/lib/xxx

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.