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

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁