问题描述
一个新人使用pjsip在android上写了一个客户端A。
然后问题出现了:
A呼叫PC端sip,没有声音;
PC端sip将呼叫A,声音正常。
sip的消息是正常的。
查找过程
当时我在调试Freeswitch的webrtc,我改了很多设置。我改回去之后还是不行,我怕我遗忘了什么,直接重新安装了个Freeswitch。但是还是不行。
我在手机上使用Sipdroid是正常的。
后来抓包发现了。那个哥们写的客户端,注册用的是udp,呼叫用的是tcp。
然后我修改客户端,发现这不是问题点。
观察fs日志
2020-05-29 20:54:35.190698 [DEBUG] mod_sofia.c:4819 (sofia/internal/1000@192.168.102.54:52817) State Change CS_NEW -> CS_INIT
2020-05-29 20:54:35.190698 [NOTICE] switch_ivr_originate.c:2851 Cannot create outgoing channel of type [error] cause: [USER_NOT_REGISTERED]
2020-05-29 20:54:35.190698 [DEBUG] switch_core_state_machine.c:584 (sofia/internal/1000@192.168.102.54:52817) Running State Change CS_INIT (Cur 2 Tot 124)
2020-05-29 20:54:35.190698 [DEBUG] switch_core_state_machine.c:627 (sofia/internal/1000@192.168.102.54:52817) State INIT
2020-05-29 20:54:35.190698 [DEBUG] mod_sofia.c:90 sofia/internal/1000@192.168.102.54:52817 SOFIA INIT
搜遍全网也没找到好用的方法。
然后使出对比大发:
然后发现了。有问题的这一方,里面的ip地址竟然是公网ip。
然后我意识到,可能是nat网络的缘故,于是我切换了一下网络,改成纯局域网。
**
错误变化了:
变成了点击拨打后,要过个5s多才会拨出(这里应该是pjsip的问题)。
然后对方接起后,立刻就挂断了。返回的错误码是488
hanging up, cause: INCOMPATIBLE_DESTINATION
到了这里猜测应该是域的问题。
我的fs:192.168.102.58 、
手机:192.168.101.168、
pc端:192.168.102.40
修改办法
1 ,修改 /usr/local/freeswitch/conf/autoload_configs/acl.conf.xml文件。
添加了
在
<list name="lan" default="allow">
<node type="deny" cidr="192.168.42.0/24"/>
<node type="allow" cidr="192.168.42.42/32"/>
<node type="allow" cidr="192.168.42.42/16"/>
</list>
中添加了一行
<node type="allow" cidr="192.168.42.42/16"/>
2,
参考
在 sip_profiles/internal.xml 中添加了
<!--robin add next line 20200530-->
<param name="apply-candidate-acl" value="localnet.auto"/>
<param name="apply-candidate-acl" value="rfc1918.auto"/>
这一步,步骤2,我感觉也没用。但是我懒得验证了。
重启fs
注:这里重启 reloadxml 、reloadacl,感觉都没用。
结束
就这样,花费了差不多1天的功夫。