Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Voip应用程序-背景和保持nat针孔活动_Iphone_Objective C_Voip_Pjsip - Fatal编程技术网

Iphone Voip应用程序-背景和保持nat针孔活动

Iphone Voip应用程序-背景和保持nat针孔活动,iphone,objective-c,voip,pjsip,Iphone,Objective C,Voip,Pjsip,我正在测试一个使用PJSip的iphone应用程序开发人员编写的Voip sip客户端。我自己也曾玩弄过一些SIP开发,但我不是专家 使用我们的VOIP软交换(Acme packet/Broadsoft),它通过动态确定最佳重新注册时间来保证Nat针孔在Nat设备上保持活动状态,从而负责所有Nat处理。通常情况下,当iphone落后于NAT时,此时间介于60-90秒之间 Iphone应用程序正在使用TCP,并且可以很好地进行后台处理。显然,背景接地是节省电池寿命的理想选择。通话会唤醒手机,您可以

我正在测试一个使用PJSip的iphone应用程序开发人员编写的Voip sip客户端。我自己也曾玩弄过一些SIP开发,但我不是专家

使用我们的VOIP软交换(Acme packet/Broadsoft),它通过动态确定最佳重新注册时间来保证Nat针孔在Nat设备上保持活动状态,从而负责所有Nat处理。通常情况下,当iphone落后于NAT时,此时间介于60-90秒之间

Iphone应用程序正在使用TCP,并且可以很好地进行后台处理。显然,背景接地是节省电池寿命的理想选择。通话会唤醒手机,您可以收听通话

问题是,当应用程序进入后台模式时,它无法保持Nat针孔打开。这意味着一旦针孔关闭,防火墙将始终拒绝新的来电进入Iphone应用程序。这会影响应用程序的传入呼叫工作几分钟,然后一段时间不工作,然后当应用程序从后台出来并再次注册时,入站呼叫再次工作

根据苹果的文档:

他们为voip应用程序内置了特殊的例外情况,我们可以: 1.配置应用程序套接字,使其仍可处理传入消息。这没有帮助,因为如果nat针孔关闭,消息将永远不会到达应用程序。 2.使用保持活动,但最短时间为600秒。这也意味着针孔将关闭

有没有一种聪明的方法可以让一个应用程序发送一条Voip Sip注册信息,比如说在后台每隔60秒左右。或者,应用程序可以每60秒唤醒一次,做一些工作,然后关闭


我真的很困惑,市场上是否还有其他sip应用程序解决了这个问题。

允许TCP保持有效性如果间隔不是太短,我认为这应该可以保持NAT会话打开。您能告诉我们这是否有用吗?

解决方案是让Acme向注册到它的设备发送TCP keepalives,并将过期时间设置为至少600秒。您可能希望它更高,因为手机需要一些时间重新注册,所以720之类的东西会更好

如果您将keepailve间隔设置得足够低,大约30秒左右,则应保持NAT针孔打开。NAT应该允许更高的间隔,但这可能需要一些测试


我知道ACME SBC可以解决这个问题。

市场上有一些应用程序已经解决了这个问题。例如3CX应用程序。你有什么解决方案吗?