【FreeSwitch开发实践】外呼线路电话收不到回铃音问题的解决

news/2024/10/17 14:22:12/

✨ 博客主页:小小马车夫的主页
✨ 所属专栏:FreeSwitch开发实践
✨ 专栏介绍:主要介绍博主在实际项目中使用FreeSwitch开发外呼类项目的一些经验心得,主要涉及FreeSwitch的基本安装编译、基本配置、ESL、WSS、录音、自定义模块、media bug、语音播放、MRCP及对接AI机器人等内容。内容在持续更新中,如果感兴趣可以对专栏进行订阅~

请添加图片描述

文章目录

  • 一、前言:
  • 二、问题概述
    • 2.1 软件环境
    • 2.2 问题描述
    • 2.3 拨号命令
  • 三、原因分析:
  • 四、解决方案:
  • 五、后记


一、前言:

FreeSwitch服务器在对接通信线路时常会遇到一些没有声音的问题,今天就介绍一个收不到回铃音和提示音的问题。


二、问题概述

2.1 软件环境

FreeSwitch 1.10.7
CentOS 7.4 64位

2.2 问题描述

FreeSwitch使用外呼线路拨打电话,不能收到回铃音或提示音(就是早期媒体收不到),但可以收到SIP信令数据和电话接通后的语音数据。

2.3 拨号命令

bgapi originate sofia/external/18600000001@120.120.120.120:2018 &echo

说明:
18600000001 为被手机号码
120.120.120.120:2018 为线路的IP和端口
echo为回音程序,拨打回音程序是因为可以清楚的听到返回回来的语音


三、原因分析:

经过一系列定位和网上搜索一些遇到类似问题资料,如nat穿透相关的FreeSwitch配置,都不起作用。不过大体原因知道了一些。
问题的原因是FreeSwitch服务器是公司的内网中,而与线路通信要用外网,首先FreeSwitch知道线路的外网地址,而线路并不清楚FreeSwitch的媒体外网地址,或者即便知道了,由于一个公司的外网到内网要经过层层防火墙、网关,要涉及网络穿透NAT,中间链路层数较多,不易定位问题。但有一点,只要FreeSwitch先向线路发送一个语音RTP数据包,由于里会携带FreeSwitch服务器的IP外网信息和端口,那么线路服务器也就能定位FreeSwitch服务器,数据自然也就能发送过来。


四、解决方案:

实现一个模块APP, 它的功能是在回铃音开始时,收到数据后,返回一帧数据(一帧就可以)。
具体实现步骤如下:

    1. 在模块APP中 订阅media bug
    1. 在media bug回调函数中,获取语音流
    1. 获取语音流后,将数据重新返回给被叫
    1. 确保第3步只写一次

其中,media bug回调函数关键代码如下:

switch_bool_t myapp_media_bug_callback(switch_media_bug_t *bug, void *user_data, switch_abc_type_t type)
{switch_core_session_t* session = detector->session;switch (type) {case SWITCH_ABC_TYPE_READ_REPLACE:{switch_frame_t *frame;if (!(frame = switch_core_media_bug_get_read_replace_frame(bug))) {return SWITCH_FALSE;}if (detector->is_send_rtp) {detector->is_send_rtp = SWITCH_FALSE;switch_core_session_write_frame(session, frame, SWITCH_IO_FLAG_NONE, 0);}break;}default:break;}return SWITCH_TRUE;
}

说明:
模块APP创建方法详见《FreeSwitch开发实践】自定义模块创建与使用》
media bug创建方法详见《【FreeSwitch开发实践】media bug获取通话语音流》


五、后记

本文的方法能解决没有回铃音的问题,但后来通过网络的方法,也就网关配置的方法也解决了问题,而且相比用FreeSwitch自定义模块的方法,更加简单。不过通过上方法,能更加清楚问题本质原因,收获也是很大的。
以上,仅供大家作参考~


如果觉得有些帮助或觉得文章还不错,请关注一下博主,你的关注是我持续写作的动力。另外,如果有什么问题,可以在评论区留言,或者私信博主,博主看到后会第一时间进行回复。
【间歇性的努力和蒙混过日子,都是对之前努力的清零】

欢迎转载,转载请注明出处:https://xiao2macf.blog.csdn.net/article/details/127954470


http://www.ppmy.cn/news/790949.html

相关文章

ESFramework的最简化应用案例(控制台服务端和客户端,支持文本,振铃提醒,文件传输)

问:ESFramework是什么? 答:.NET通信框架. 问:能做什么? 答:分布式通信的系统如:即时通讯,多人在线游戏、在线网页游戏、文件传送、数据采集、分布式OA系统、远程教育系统等。 问:平台要求? 答:直接构建在.NET Framework 2.0上. 问:具体怎么写? 答:引擎初始化…

40. 同时在线最多的人数

文章目录 题目需求思路一实现一题目来源 题目需求 根据用户登录明细表(user_login_detail),求出平台同时在线最多的人数。 期望结果如下(截取部分): cn7 需要用到的表: 用户登录明细表&…

如何使用python删除文件或文件夹,根据提供的文件夹或文件路径列表删除对应的文件或文件夹

先上代码: def remove_file_or_dir(base_path, file_or_dir_names, log_tagcommon):print(f"{log_tag} Start deleting files: {file_or_dir_names} - {base_path}")for name in file_or_dir_names:full_file_path f"{base_path}/{name}"try:…

x264的一些编码参数

原文地址:http://blog.csdn.net/vblittleboy/article/details/8982857 x264是一个 H.264/MPEG4 AVC 编码器,本指南将指导新手如何创建高质量的H.264视频。 对于普通用户通常有两种码率控制模式:crf(Constant Rate Factor)和Two p…

Hbuiler,HbuilderX ios 使用个推配置

1、能够完成推送的条件 ①、ios应用必须有开发证书,或者发布证书,能够打包成ipa包(ios打包及证书申请查看:https://blog.csdn.net/u011118071/article/details/104937328),运行在真实苹果手机上&#xff0c…

Mac 配置Nginx域名转发

配置环境 MacOS Monterey 12.0.1提前运行端口88的Web项目 1.修改hosts文件 打开host文件 sudo vi /etc/hosts XaysdeMacBook-Pro:~ xay$ sudo vi /etc/hosts 添加域名映射 ## # Host Database # # localhost is used to configure the loopback interface # when the sy…

STM32的ADC模式及其应用例程介绍

STM32的ADC模式及其应用例程介绍 📍ST官方相关应用笔记介绍资料:https://www.stmcu.com.cn/Designresource/detail/application_note/705947📌相关例程资源包:STSW-STM32028:https://www.st.com/zh/embedded-software/…

一文搞懂常见的加密算法

加密算法在互联网技术领域中几乎是无处不在,而密码学也是网络安全的重要基础,这篇文章我们就一起来学习下常见的加密算法。 1 为什么要研究加密算法? 在技术方面,加密算法的研究具有重要的意义,主要体现在以下几个方…