2021-05-07 02:57:04
Linphone Android下一些手机DNS问题的解决
在移动网络环境下,Linphone Android登录SIP服务器时间过长的问题,主要是由于DNS解析超时导致的。特别是在华为和小米等品牌的手机上,首次DNS连接往往会超时,但触发第二次DNS重建连接时则能成功。针对这一问题,以下是对问题原因的分析及解决方案的详细阐述:
一、问题原因分析
DNS解析超时:
在移动网络环境下,Linphone Android尝试连接SIP服务器时,首先需要进行DNS解析以获取服务器的IP地址。
日志显示,DNS解析过程中,dns_res_check()函数持续进行,但直到超时(默认15000毫秒)也未成功。
手机系统或网络差异:
华为和小米等手机在移动网络环境下的DNS解析行为可能与其他品牌或网络环境存在差异。
这种差异可能导致首次DNS解析失败,但后续尝试能够成功。
Linphone代码实现:
Linphone的源代码中,DNS解析超时时间是通过belle_sip_provider->stack->dns_timeout参数控制的。
该参数在Linphone的初始化过程中被设置为默认值(15000毫秒),且未在配置文件中提供修改选项。
二、解决方案
修改DNS解析超时时间:
通过修改Linphone Android的源代码,将dns_timeout参数的值从默认的15000毫秒减小到500毫秒。
修改位置在linphone_core_find_auth_info或相关函数中,具体为chan->stack->dns_timeout = 500;。
测试验证:
在修改后的Linphone Android版本上进行测试,验证DNS解析超时时间缩短后,SIP注册时间是否显著减少。
测试结果显示,修改后的华为手机SIP注册时间从原来的18-20秒缩短到不到1秒。
三、总结
需要注意的是,虽然修改源代码可以解决问题,但这并不是一种通用的解决方案。对于不同的手机品牌或网络环境,可能需要进一步调整dns_timeout的值以达到最佳效果。同时,也建议Linphone的开发团队在未来的版本中提供配置DNS解析超时时间的选项,以便用户或开发者能够根据实际情况进行调整。