pjsip iOS在通话期间处理ip更改

时间:2016-06-03 11:09:10

标签: ios ip-address pjsip

我想在ios上使用pjsip在正在进行的通话期间处理ip更改表格wifi到4g并返回。 我已经按照pjsip网站的所有步骤进行了操作:https://trac.pjsip.org/repos/wiki/IPAddressChange这里我发现在发送pjsua_acc_set_registration(the_acc_id, PJ_FALSE);后呼叫已断开连接。 另外,我不知道如何在第4点发送重新注册。

  

“最后,一旦在2b中取消注册)完成,   重新注册(使用TCP)。“

任何建议,建议,链接到我将解决问题的任何资源都很好。

3 个答案:

答案 0 :(得分:1)

reference中描述了最简单可靠的方法:

  

最直接的解决方案当然是重启所有内容,这意味着以pjsua术语调用pjsua_destroy(),然后调用pjsua_create()pjsua_init(),等等。

要检测4G / WiFi更改,您应该使用Apple Reachability API,Tony Million的好包装AFNetworkReachabilityManagerReachability。我在自己的项目中使用了这种方法,并且它完美无缺。

答案 1 :(得分:1)

从版本2.7开始,有第二种方法:

  

方法2:选择性更新

     

或者,可能有一种方法允许堆栈继续   运行,必要时更新地址信息。这种方法   将需要使用一些特定功能,以及一些   应用程序在检测到IP地址时的操作   改变。

     

具体配置和任务将在下面说明。请注意我们   假设SIP和媒体套接字绑定到INADDR_ANY   (0.0.0.0)而不是特定的接口IP地址(这是   默认行为)。

     

更新2.7 或更高版本:应用程序可以应用此选择性更新   方法更简单,请查看机票#2041

答案 2 :(得分:1)

为了获得Internet / IP更改,您可以使用Apple ReachabilityAPI或Tony的Reachability。在可达性更改观察器中,您可以比较以前的IP地址系列和当前的IP地址系列。

如果两者都来自同一家族,例如last和new属于同一IP家族IPV4或IPV6

  1. 获取当前通话信息。
  2. 使用pjsip方法 pjsua_call_reinvite(),并使用标志 PJSUA_CALL_UPDATE_CONTACT

如果两者都来自不同的家庭,例如最后一个属于IPV4,新的属于IPV6,反之亦然,请按照以下步骤使用。

  1. 发送注册请求
  2. 获取当前通话信息。
  3. 使用pjsip方法 pjsua_call_reinvite(),并使用标志 PJSUA_CALL_UPDATE_CONTACT