freeswitch透传带SDP的180
概述
freeswitch是一款简单好用的VOIP开源软交换平台。
freeswitch对于180/183的消息处理有默认的规则,但是在3GPP的标准中,消息流程会更加复杂,场景更多变。
这样就需要我们根据实际环境中的场景定制消息流程。
本文只讨论带SDP的183/180消息。
环境
centos:CentOS release 7.0 (Final)或以上版本
freeswitch:v1.10.7
GCC:4.8.5
fs中183/180的默认处理
fs收到183(SDP)的时候,会透传183(SDP)到A路。
fs收到180(SDP)的时候,默认将180(SDP)转换为183(SDP)传给A路。
在设置了参数“early_use_180”的场景下,fs会把183(SDP)和180(SDP)都转换为180(SDP)传给A路。
期望的183/180处理流程。
fs收到183(SDP)的时候,会透传183(SDP)到A路。
fs收到180(SDP)的时候,会透传180(SDP)到A路。
修改方案
修改方案,在B路处理180(SDP)消息的流程中,设置通道变量“180withsdp=true”,在A路响应183/180消息的流程中,检查通道变量“180withsdp”的值并设置响应的消息码。
修改 src\mod\endpoints\mod_sofia\sofia.c,7537行
if (status == 180 && r_sdp) {
status = 183;
if (switch_true(switch_channel_get_variable(channel, "passthrough180")))
{
//设置通道变量,标记B路的180+SDP,在A路响应时,处理send_sip_code为180+SDP
if (switch_core_session_get_partner(session, &other_session) == SWITCH_STATUS_SUCCESS)
{
other_channel = switch_core_session_get_channel(other_session);
switch_channel_set_variable(other_channel, "180withsdp", "true");
switch_core_session_rwunlock(other_session);
}
}
}
修改 src\mod\endpoints\mod_sofia\mod_sofia.c,2548行
if (switch_true(switch_channel_get_variable(channel, "passthrough180")) &&
switch_true(switch_channel_get_variable(channel, "180withsdp")) )
{
send_sip_code = 180;
p_send_sip_msg = sip_180_Ringing;
}
重新编译安装mod_sofia模块。
修改拨号计划如下。
<include>
<context name="out2in">
<extension name="sbc-out2in" continue="true">
<condition field="destination_number" expression="^(\d+)$">
<action application="export" data="passthrough180=true" />
<action application="bridge" data="{sip_invite_call_id=${sip_call_id}
}sofia/external/sip:${destination_number}@10.55.55.138:5555"/>
</condition>
</extension>
</context>
</include>
测试
搭建测试环境,B路响应180(SDP)。
总结
常见的消息处理流程都可以在mod_sofia中找到,但是对于AB路之间的消息透传,以及涉及到codec媒体协商的流程会比较复杂。
空空如常
求真得真
freeswitch透传带SDP的180的更多相关文章
- NodeMCU透传数据到TcpServer和Yeelink平台
准备工作 1. NodeMCU LUA ESP8266 CP2102 WIFI Internet Development Board,仔细看背面可以看出自带cp2102模块,可以通过普通的手机充电 ...
- ESP8266串口和MQTT服务器消息互传(版本一) 单纯透传+保存WIFI账号信息
目标 制作一个ESP8266串口和MQTT相互透传的小WIFI,可用手机修改其连接的路由器,由此该模块可以任意加载到各种串口传输的单片机上,完成硬件到云端的传输. 1 实物图 2 MQTT网页测试客户 ...
- Dubbo透传traceId/logid的一种思路
前言: 随着dubbo的开源, 以及成为apache顶级项目. dubbo越来越受到国内java developer欢迎, 甚至成为服务化自治的首选方案. 随着微服务的流行, 如何跟踪整个调用链, 成 ...
- NodeMCU入门(1):刷入At固件,透传数据到TcpServer和Yeelink平台
准备工作 1. NodeMCU LUA ESP8266 CP2102 WIFI Internet Development Board,仔细看背面可以看出自带cp2102模块,可以通过普通的手机充电 ...
- 手把手教你开发BLE数据透传应用程序
如何开发BLE数据透传应用程序?什么是BLE service和characteristic?如何开发自己的service和characteristic?如何区分ATT和GATT?有没有什么工具可以对B ...
- CC1101 433无线模块,STM8串口透传
CC1101 433无线模块,STM8串口透传 原理图:http://download.csdn.net/detail/cp1300/7496509 下面是STM8程序 CC1101.C /*** ...
- 16-ESP8266 SDK开发基础入门篇--TCP 服务器 非RTOS运行版,串口透传(串口回调函数处理版)
https://www.cnblogs.com/yangfengwu/p/11105466.html 其实官方给的RTOS的版本就是在原先非RTOS版本上增加的 https://www.cnblogs ...
- Arduino uno r3 使用 ESP8266 UART-WiFi 透传模块
一.所需硬件材料 1.ESP8266:01s某宝上3.5块钱 2.杜邦线:某宝几块钱一组40P,这里只需要三根,用于连接 树莓派与继电器 3.烧录器 二.ESP8266 AT固件烧录 ESP8266主 ...
- 1、利用蓝牙定位及姿态识别实现一个智能篮球场套件(一)——用重写CC2541透传模块做成智能手环
一.预言 要实现一个智能篮球场套件,需要设计一个佩戴在篮球运动员手臂上的可以检测投篮.记步的手环,以及一套可以根据RSSI定位运动员的蓝牙定位装置.下面是大致需要的步骤: 首先,需要用CC2541透传 ...
- 个推+DCLOUD,推送消息和透传消息
DCLOUD方案中集成了个推方案,最好是用个推来做推送相关的东西 消息分2类: 1.推送消息,这种一般会出现在手机的最上面的通知栏,用户是肯定会知道的 2.透传消息,这种一般就是一个Alert提示框, ...
随机推荐
- [ABC263A] Full House
Problem Statement We have five cards with integers $A$, $B$, $C$, $D$, and $E$ written on them, one ...
- 带圆角的虚线边框?CSS 不在话下
今天,我们来看这么一个非常常见的切图场景,我们需要一个带圆角的虚线边框,像是这样: 这个我们使用 CSS 还是可以轻松解决的,代码也很简单,核心代码: div { border-radius: 25p ...
- MVC:开发模式
1.jsp演变历史 1.早期只有servlet,只能使用response输出标签数据,非常麻烦. 2.后来有了jsp,简化了Servlet的开发,如果过度使用jsp中即写大量的Ja ...
- Tensorflow2.0:使用Keras自定义网络实战
tensorflow2.0建议使用tf.keras作为构建神经网络的高级API 接下来我就使用tensorflow实现VGG16去训练数据 背景介绍: 2012年 AlexNet 在 ImageNet ...
- Educational Codeforces Round 160 (Rated for Div. 2) 题解A~D
Educational Codeforces Round 160 (Rated for Div. 2) A. Rating Increase 纯暴力,分割字符串,如果n1<n2就输出,如果遍历完 ...
- vue3.3实验性新特性defineModel
子父之间使用v-model双向绑定数据,子组件每次都要写emit和props觉得麻烦? vue3.3新的实验性特性defineModel可以完全不写emit和props. 由于是实验性特性,所以需要配 ...
- 手写滑动同步滚动进度条jq插件
因需要一种滑动显示内容,并且带可拖动的进度条,即下面这种效果 找了很多插件,总有地方不能满足需求.于是决定自己手写,下面为完整源码: swiper.js 1 $.swiperCalculator = ...
- 集群化部署ZabbixServer
修改Zabbix-agent配置 1.修改配置文件 三台zabbix-Server上操作 vim /etc/zabbix/zabbix_agent2.conf Server=127.0.0.1 改成 ...
- JavaFx之全局异常捕获(二十)
JavaFx之全局异常捕获(二十) javafx开发时,我们有时候需要捕获未处理的异常.手动抛出的异常,在main方法中添加下面代码: public static void main(String[] ...
- Spring Cloud 学习推荐
学习 Spring Boot Spring tutorials | Java Web Development, Spring Cloud Programming tutorials Spring Bo ...