当前位置: 首页 > article >正文

用Kamailio修复FreeSWITCH的sdp

FreeSWITCH收到对话内的OPTIONS(很少见),Respond的sdp有问题

v=0
o=freeswitch 1680834355 1680834356 IN IP4 192.168.1.100
s=freeswitch
c=IN IP4 192.168.1.100
t=0 0
m=audio 0 RTP/AVP 8 97    # rtp端口居然为0
a=rtpmap:8 PCMA/8000
a=rtpmap:97 telephone-event/8000
a=fmtp:97 0-15
a=sendrecv
a=ptime:20

尝试用Kamailio修复,主要内容如下:

loadmodule "textops.so"
loadmodule "textopsx.so"
loadmodule "sdpops.so"
loadmodule "htable.so"
modparam("htable", "htable", "fsmedia=>size=8;autoexpire=300;")


route[SAVE_FS_MEDIA] {
    if (is_method("INVITE") && has_body("application/sdp") && search_body("s=freeswitch")) {
        $var(body) = $sdp(body);
        $var(m) = $(var(body){line.sw,m=audio});
        $sht(fsmedia=>$ci) = $var(m);
    }
}


route[RESTORE_FS_MEDIA] {
    if (is_method("OPTIONS") && has_body("application/sdp") && search_body("s=freeswitch")) {
        $var(body) = $sdp(body);
        $var(m) = $(var(body){line.sw,m=audio});
        $var(new_m) = $sht(fsmedia=>$ci);
        replace_body($var(m), $var(new_m));
        msg_apply_changes();
    }
}
 

或者用下面的代码,干脆删除sdp

remove_body();
remove_hf("Content-Type");
msg_apply_changes();

温馨提示:

  • $sdp(body) 来自sdpops模块
  • $(var(body){line.sw,m=audio}) 来自Transformations,找到包含m=audio的那一行
  • replace_body 来自textops模块
  • msg_apply_changes来自textopsx模块,修改sip消息,调用此函数,再读,就可以读到改变后的值。比如msg_apply_changes(); xinfo("newsdp = $sdp(body)\n");

sdpops模块还有一个功能,就是让sess_version加一,有时很有用。


http://www.kler.cn/news/10573.html

相关文章:

  • 信息系统项目管理师第四版知识摘编:第23章 组织通用管理​
  • 【MySQL】delete和truncate的用法和区别
  • 每个企业经营者都应该了解的几个网络安全趋势
  • Loki采集Mysql errorlog,你值得拥有的错误日志聚合系统
  • C#调试与测试 | Assert(断言)
  • 【Pytorch】神经网络搭建
  • 常用位运算和二进制做权限管理
  • 熟练了Flex布局之后,该学学Grid布局了
  • 前端项目-12-个人中心-二级路由配置-导航守卫-懒加载
  • Linux常见操作命令【三】
  • 算法模板(2):数据结构(3) 复杂数据结构1
  • Java14新特性
  • sql server存储过程
  • Java------Stream流式编程高级API【groupingBy、flatMap】(六)
  • 记2023第十四届蓝桥杯感受
  • 初识linux之线程控制
  • (二十三)槽函数的书写规则导致槽函数触发2次的问题
  • Microsoft Intune部署方案
  • 为pip永久性添加国内镜像安装源
  • 44.节流与防抖
  • JavaScript函数
  • android ndk 编译 libevent
  • setInterval 让它刚进页面时执行一次,然后根据设置的间隔时间执行;clearInterval清除setInterval。
  • webgl-根据鼠标点击而移动
  • linux对动态库的搜索知识梳理
  • 推荐 ChatGpt 平替介绍文章
  • TensorFlow 机器学习秘籍第二版:6~8
  • 常见网络协议汇总(一)
  • 前端手写综合考题
  • DS-NeRF代码