2026/6/11 5:59:22
网站建设
项目流程
可以进网站的软件,电脑手机网站制作,word如何做网站链接,惠州网站建设领头主要原因是AB路的rfc2833的payload有差异造成的#xff0c;可以通过kamailio的配置逻辑来修复。环境CentOS 7.9kamailio:5.8.3-bullseye dockerrtpengine:mr13.1.1.6-4 docker问题kamailio 5.8.3 rtpengine 13.1.1.6#xff0c;媒体代理模式。A路invite的sdp中dtmf参数如下。…主要原因是AB路的rfc2833的payload有差异造成的可以通过kamailio的配置逻辑来修复。环境CentOS 7.9kamailio:5.8.3-bullseye dockerrtpengine:mr13.1.1.6-4 docker问题kamailio 5.8.3 rtpengine 13.1.1.6媒体代理模式。A路invite的sdp中dtmf参数如下。maudio 45540 RTP/AVP 8 18 97artpmap:97 telephone-event/8000afmtp:97 0-15经过kamailio转发后的invite的sdp。maudio 33088 RTP/AVP 8 18 97artpmap:97 telephone-event/8000afmtp:97 0-15B路响应的200OK的sdp中dtmf参数如下。maudio 16394 RTP/AVP 8 101artpmap:101 telephone-event/8000afmtp:101 0-16经过kamailio转发后的200OK。maudio 31724 RTP/AVP 8A路sdp中dtmf的payload为97kaimailio正常透传B路响应sdp中dtmf的payload为101经过kamailiortpengine处理后sdp中的dtmf编码被删除了。通话接通后A路按键发送DTMF码采用inband波形模式B路无法正常识别。修复问题的本质是B路响应的sdp中dtmf的payload被删除了但是媒体通道并没有受影响媒体转发也没有任何问题所以最直接的办法就是在kamailio的cfg配置中再把payload加回去。修改kamailio.cfg文件主要修改如下。...modparam(rtpengine, write_sdp_pv, $avp(sdp))...route[RESET_DTMF]{xinfo(route[RESET_DTMF]\n);# reset DTMF payloadif(search_body(telephone-event/8000) !search_str($avp(sdp), telephone-event/8000)){xinfo(Added DTMF 101 payload to SDP\n);$avp(sdp) $(avp(sdp){re.subst,/^(maudio.* 8)/\1 101/});$avp(sdp) $(avp(sdp){re.subst,/^(artpmap:8 PCMA.*)$/\1\nartpmap:101 telephone-event\/8000\nafmtp:101 0-15/});set_body($avp(sdp), application/sdp);}else {xinfo(DTMF 101 payload already exists in SDP\n);set_body($avp(sdp), application/sdp);}return;}route[RTPENGINE] {xinfo(route[RTPENGINE]\n);# check if have sdpif (!has_body(application/sdp)){xinfo(!has_body(application/sdp)\n);return;}if(ds_is_from_list(3060) || ds_is_from_list(3061)){xinfo(route[RTPENGINE], 3060|3061\n);# from pub, to privrtpengine_manage(replace-origin replace-session-connection directionpub directionpriv );set_body($avp(sdp), application/sdp);}else if(ds_is_from_list(5060)){xinfo(route[RTPENGINE], 5060\n);# from priv, to pubrtpengine_manage(replace-origin replace-session-connection directionpriv directionpub );route(RESET_DTMF);}return;}思路就是针对AB路会有不同payload的场景调用route(RESET_DTMF)在PCMA编码的后面加上payload101的编码。测试重启kamailio发起呼叫。从信令中看到经过kamailio处理后的200OK的sdp中增加了payload101的dtmf编码。A路按键测试可以看到rtpengine正常转发了dtmf码。image总结kamailiortpengine作为媒体代理的方式简单易用转发效率高不会修改媒体包的内容rtp和rtcp都可以正常透传转发。