iOS 11.2.5中PJSIP IPv6注册异常问题咨询
我之前在适配pjsua到iOS 11+版本时,也碰到过类似的网络栈不一致问题,结合对pjsua配置和iOS网络策略的了解,给你几个具体的排查和解决方向:
检查账户配置的IP版本参数
调用pjsua_acc_add时你应该是指定了IPv6相关的配置,但pjsua_acc_modify可能没有继承或意外重置了这个设置。建议在执行modify前,先通过pjsua_acc_get_config获取当前账户的配置,确认acc.cfg.ip_version字段是否设置为PJ_IPV6或PJ_IPV6_V4MAPPED,修改完其他参数后,保持这个IP版本配置再提交modify请求。强制pjsua优先使用IPv6传输
iOS 11开始系统对IPv6的强制适配逻辑有调整,pjsua在modify操作时可能默认走了IPv4路径。你可以在pjsua初始化阶段,把pj_endpoint_cfg中的ip_version设置为PJ_IPV6;或者在账户配置里明确指定acc.cfg.transport_id为IPv6类型的传输ID(可以通过pjsua_transport_enum遍历找到IPv6的UDP传输),确保modify操作复用IPv6的传输通道。升级pjsua到兼容iOS 11的版本
部分旧版本的pjsua在iOS 11的IPv6环境下存在bug,比如账户modify操作没有正确复用之前的网络上下文。建议升级到pjsua 2.10及以上版本,官方后续版本修复了不少IPv6相关的适配问题。抓包验证SIP消息的网络属性
用Wireshark或Charles抓包对比pjsua_acc_add和pjsua_acc_modify的SIP请求,重点看Contact头、Via头里的IP地址类型。如果modify请求的头信息用了IPv4地址,那大概率是配置中的IP版本参数没有正确传递,需要修正配置后再测试。
内容的提问来源于stack exchange,提问作者Cherry

