当前位置: 首页 > 工具软件 > LinPhone > 使用案例 >

Linphone 点对点通话

林承悦
2023-12-01

需求:为opensips服务器开启或者关闭情况下,不影响手机A和手机B的linphone客户端通话。

 


1.      在linphone界面上输入B的ip地址进行呼叫。

2.      查看日志,发现INVITE消息的字段错误,

3.      修改linphone 设置(将domain设成B的ip地址而不是服务器的ip地址),模拟一个正确的INVITE消息,发起呼叫

4.      呼叫失败,抓包查看B端没有响应INVITE消息

5.      查看代码,暂时没有头绪。

6.      安装支持点对点通话的sip工具软件SipPhone

7.      通话抓包,分析linphone发出的INVITE消息,得知没有问题

8.      测试发现手机上安装的linphone软件点对点呼叫SipPhone时可以互通,虚拟机上的linphone点对点呼叫SipPhone不能互通。测试发现SipPhone点对点呼叫linphone时都不能互通。

9.      分析发现linphone虚拟机使用私有ip,地址为10.0.0.15,所以虚拟机发起呼叫,SipPhone接收到INVITE后,向10.0.0.15发送100和180响应,虚拟机接收不到,造成无法互通。

10.  放弃虚拟机测试,改用笔记本上usb连接手机进行测试和日志打印。

11.  因为linphone→SipPhone OK,SipPhone→linphone NOK,怀疑linphone呼叫发起处理流程支持点对点,而呼叫响应处理流程有问题。

12.  查看代码,打印日志,发现SipPhone发起呼叫时,linphone没有进入呼叫响应处理函数。

13.  怀疑INVITE包被底层丢掉。

14.  查看代码,追踪在哪里把INVITE包丢掉,没有结论。

15. 经检测确认为linphone没有进行端口侦听。

16.  查看注册代码、UDP通道代码,打印注册日志和非注册日志进行对比,没有发现端口设置代码。

17.  查看UDP的socket处理函数,jevent,jpipe,对比日志,没有发现设置端口的代码。

18.  写udp发包测试程序,发送到手机,抓包提示unreachable。可知udp发送无关。

19.  从udp通道open函数查找到listen_addr函数,查到端口是在linphone初始化时读取sip配置文件处设置。在该处设置udp端口为一个固定端口8309。

20.  udp发包测试程序对B端该端口进行发包,可以到达。

21.  A端呼叫B端端口,点对点呼叫建立,问题解决。

 类似资料: