iOS voip应用程序在5分钟后在后台模式下没有响应

iOS voip应用程序在5分钟后在后台模式下没有响应,ios,sockets,voip,pjsip,kamailio,Ios,Sockets,Voip,Pjsip,Kamailio,我正在开发一个iOS(7&8)VOIP应用程序(通过使用Kamailio服务器和PJSIP设备库) 当应用程序位于前台时,一切正常,但问题是当应用程序位于后台时,套接字将仅保持活动状态5分钟(300秒)。 当我注册时: [application setKeepAliveTimeout:600 handler: ^{ [self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone

我正在开发一个iOS(7&8)VOIP应用程序(通过使用Kamailio服务器和PJSIP设备库)

当应用程序位于前台时,一切正常,但问题是当应用程序位于后台时,套接字将仅保持活动状态5分钟(300秒)。
当我注册时:

[application setKeepAliveTimeout:600 handler: ^{
        [self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES];
    }];
我能接到这个电话

问题是
setKeepAliveTimeout
是10分钟,而套接字仅持续5分钟

我在
.plist
中启用了“应用程序提供IP语音服务”。我还将PJSUA_REG_间隔设置为600秒。

请帮助我在PJSIP中设置VIOP套接字。

您是否尝试按如下方式将VoIP属性分配给流

CFReadStreamSetProperty((__bridge_retained CFReadStreamRef)iStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);

一些互联网提供商的NAT在沉默几分钟后关闭了不活动的套接字

可以使用以下代码激活PJSIP中套接字的内部保持活动消息:

pjsip_cfg()->tcp.keep_alive_interval = 90;
pjsip_cfg()->tls.keep_alive_interval = 90;

当然,您必须设置iOS保持活动计时器。

点击链接,我想您会得到答案。我已经这样做了,但是运气不好。我如何在PJSIP中使用CFReadStreamRef?我得到了错误:接收到50个连续错误:接受()操作120035,停止进一步的ioqueue接受。根据PJSIP文档的内部操作。如果我没有错,请纠正我。我正在使用pjsua_acc_set_注册,用于重新注册,它的行为也很有趣,有时它会在应用程序处于后台时发出408503个错误。抱歉,我不知道PJSIP。感谢您的回答,PJSIP内部正在这样做。