FreeSWITCH的SDP读取与设置

2024-05-16 03:18
文章标签 读取 设置 freeswitch sdp

本文主要是介绍FreeSWITCH的SDP读取与设置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在对接第三方SIP客户端和网关时,常常需要修改手工修改SDP信息。 下面给出设置修改SDP信息的两种方法,如下: 
- 通过拨号方案修改SDP信息 
- 通过API命令修改SDP信息

通过拨号方案修改SDP信息

Edit sdp channel variables by dialplan.

拨号方案重写SDP信息

在拨号方案里面通过set方法设置switch_r_sdp的值,该方法会直接覆盖掉原有的sdp值。 
具体拨号方案如下所示:

<extension name="show_info"><condition field="destination_number" expression="^9192$"><action application="answer"/><action application="info"/><action application="log" data="INFO  ===switch_r_sdp Before:========${switch_r_sdp}"/><action application="set"><![CDATA[switch_r_sdp=v=0
o=- 123456 123 IN IP4 192.168.1.112
s=etmedia
c=IN IP4 192.168.1.113
t=0 0
a=X-nat:0 Unknown
m=audio 4002 RTP/AVP 18 103 102 117 3 0 8 9 118 119 104 4 101
a=rtpmap:18 G729/8000
]]></action><action application="log" data="INFO  ===switch_r_sdp After:============${switch_r_sdp}"/><action application="sleep" data="250"/><action application="hangup"/></condition>
</extension>  

控制台输出如下所示:

2013-06-07 22:04:44.210888 [INFO] mod_dptools.c:1458  ===switch_r_sdp Before:========v=0
o=- 3579631484 3579631484 IN IP4 192.168.1.101
s=etmedia
c=IN IP4 192.168.1.101
t=0 0
a=X-nat:0 Unknown
m=audio 4018 RTP/AVP 18 103 102 117 3 0 8 9 118 119 104 4 101
a=rtpmap:18 G729/8000
a=rtpmap:103 speex/16000
a=rtpmap:102 speex/8000
a=rtpmap:117 iLBC/8000
a=fmtp:117 mode=30
a=rtpmap:3 GSM/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:9 G722/8000
a=rtpmap:118 AMR/8000
a=rtpmap:119 AMR-WB/16000
a=rtpmap:104 speex/32000
a=rtpmap:4 G723/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=rtcp:4019 IN IP4 192.168.1.1012013-06-07 22:04:44.210888 [INFO] mod_dptools.c:1458  ===switch_r_sdp After:============v=0
o=- 123456 123 IN IP4 192.168.1.112
s=etmedia
c=IN IP4 192.168.1.113
t=0 0
a=X-nat:0 Unknown
m=audio 4002 RTP/AVP 18 103 102 117 3 0 8 9 118 119 104 4 101
a=rtpmap:18 G729/8000

从上面的输出结果可以看到,在设置完switch_r_sdp后,原有的SDP变量的值都被替换为新值。

拨号方案向A-Leg附加SDP新值

apend new value to A-Leg sdp 
上面的方法会直接覆盖掉所有的SDP值,那如果只是要附加一部分值的话,可以采用下面的方式: 
如下方拨号方案所示:

<extension name="show_info"><condition field="destination_number" expression="^9192$"><action application="answer"/><action application="info"/<action application="set" data="switch_r_sdp=${switch_r_sdp}AS:384"/><action application="sleep" data="250"/><action application="hangup"/></condition>
</extension>  

在原有变量的后面附加上自己需要的值即可。

拨号方案向B-Leg附加SDP新值

append new value to B-Leg SDP 
如果需要在桥接B-Leg之前,修改B-Leg的SDP值的话,需要用到一个通道变量sip_append_audio_sdp 
可采用下面的方式来解决:

<extension name="show_info"><condition field="destination_number" expression="^9192$"><action application="answer"/><action application="info"/><action application="export" data="sip_append_audio_sdp=b=AS:384"/><action application="sleep" data="250"/><action application="hangup"/></condition>
</extension> 
应用场景

在桥接第三方SIP客户端时,需要在SDP在里面增加对方自定义的值才能协商语音成功,在这种场景里面需要用到该变量。(此处是个人理解,如果有更好的应用,欢迎指点)

变量说明

sip_append_audio_sdp在官网的Wiki文档说明如下: 
This may be used to append audio parameters to the SDP sent to B-leg. 
It should/must be set before bridging. 
Usage:

<action application="export" data="sip_append_audio_sdp=a=fmtp:18 annexb=no"/>   

简单翻译下是该变量可以用来设置发送给B-Leg的语音变量,不过,需要在Bridge之前进行设置。

通过API命令修改SDP信息

API命令读取SDP

前提假设

假设现在有两个短号互打,1000为Easytalk,1001为x-lite,1001拨打1000,通话正常建立。

1000对应的通道UUID为:31c0ea2e-53b6-4457-8790-70b1b1c36d10 
1001对应的通道UUID为:6fec25de-34e9-4a4a-9d1c-5284bf023e43

查询A-Leg的SDP信息

使用下面的命令查询使用的SDP: 
FreeSWITCH@wchi-PC> uuid_getvar 6fec25de-34e9-4a4a-9d1c-5284bf023e43 switch_r_sdp
返回结果:

v=0
o=- 2 2 IN IP4 192.168.1.101
s=CounterPath X-Lite 3.0
c=IN IP4 192.168.1.101
t=0 0
m=audio 55190 RTP/AVP 107 119 100 106 0 105 98 8 101
a=rtpmap:107 BV32/16000
a=rtpmap:119 BV32-FEC/16000
a=rtpmap:100 SPEEX/16000
a=rtpmap:106 SPEEX-FEC/16000
a=rtpmap:105 SPEEX-FEC/8000
a=rtpmap:98 iLBC/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=alt:1 1 : +pnfung+ CxnLWcRO 192.168.1.101 55190
查询B-Leg的SDP信息

FreeSWITCH@wchi-PC> uuid_getvar 31c0ea2e-53b6-4457-8790-70b1b1c36d10 switch_r_sdp 
返回结果:

v=0
o=- 3579629755 3579629756 IN IP4 192.168.1.101
s=etmedia
c=IN IP4 192.168.1.101
t=0 0
a=X-nat:0 Unknown
m=audio 4016 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=rtcp:4017 IN IP4 192.168.1.101

API命令设置SDP

设置方法同上面拨号方案类似,都是通过修改通道变量来达到目的。只是修改的方式不同而已。

这篇关于FreeSWITCH的SDP读取与设置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

解决Java中基于GeoTools的Shapefile读取乱码的问题

《解决Java中基于GeoTools的Shapefile读取乱码的问题》本文主要讨论了在使用Java编程语言进行地理信息数据解析时遇到的Shapefile属性信息乱码问题,以及根据不同的编码设置进行属... 目录前言1、Shapefile属性字段编码的情况:一、Shp文件常见的字符集编码1、System编码

利用Python实现添加或读取Excel公式

《利用Python实现添加或读取Excel公式》Excel公式是数据处理的核心工具,从简单的加减运算到复杂的逻辑判断,掌握基础语法是高效工作的起点,下面我们就来看看如何使用Python进行Excel公... 目录python Excel 库安装Python 在 Excel 中添加公式/函数Python 读取

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...