问题1:freeswitch 接听后,延迟30秒才能正常通话的的问题
问题描述:有一个落地电话的需求采用了freeswitch作为网关。但是在与第三方sip客户端对接的时候发现有一个问题:被叫接听后, 二十多秒后才能正常通话
问题追溯:经过抓包分析,发现收到的第三方客户端处于nat 后面,所以 invite sdp中的流媒体信息是私网IP和端口,导致freeswitch无法将音频包传输到第三方客户端。
理论解决方案. freeswitch 针对nat 后面的sip客户端,可以采用rtp地址校正的方法,
<param name="disable-rtp-auto-adjust" value="true"/>
switch_rtp.c
文件中的函数rtp_common_read
用于解析接收到的RTP数据包,其中实现了RTP地址检测及校正
if (bytes && rtp_session->flags[SWITCH_RTP_FLAG_AUTOADJ] && switch_sockaddr_get_port(rtp_session->rtp_from_addr))
freeswitch更改上述配置后,并不能解决问题,仍然还是还是出现延迟通话。抓包分析对比能正常通话的sip客户端,发现第三方客户端的rtp头每个包mark标识位都有设置,
正常的sip客户端则是只在第一个包有设置