4

我认为在应用程序处于后台时,我有一个“活动”套接字的所有要求。也就是说:

  • 我的应用程序将 voip 和音频作为其背景模式。
  • 我使用 PJSIP 作为 SIP 库,它应该使用启用了“后台运行”属性的 CFReadStreams
  • 该应用程序正在使用 TCP 与 SIP 服务器建立连接。

当应用程序被发送到后台时,它会添加一个后台处理程序,该处理程序在每个时间段发送一个“keepAlive”消息。

keepAlive 似乎正在工作。如果我检查服务器中的日志,即使应用程序不在前台,我也可以看到消息是如何到达的。

问题(和问题)是,当应用程序处于后台时,我没有接到电话。

似乎socket还活着,如果我在前台没有应用程序的情况下拨打手机,没有任何反应,但如果我自己启动应用程序,则会自动检测到通话。

谢谢 :)

4

2 回答 2

4

我们发现了问题。

给定当前配置,服务器使用不同的连接来发送 INVITE 请求,而不是电话使用的初始 TCP 套接字发送初始 REGISTER 请求。

由于两个套接字不同,操作系统没有唤醒应用程序。

如果您将服务器(在我们的示例中为 Kamailio)配置为重用电话用来发送第一个 REGISTER 的初始套接字,则它可以无缝工作。

默认情况下,SIP 服务器似乎会为他们想要发送到电话的每个 INVITE 请求创建新的套接字。这种情况是iphone背景模型的问题。

于 2011-09-27T10:21:13.537 回答
0

只是为了仔细检查,您已经阅读了以下内容:http: //trac.pjsip.org/repos/wiki/Getting-Started/iPhone#UnabletoacceptincomingcallinbackgroundmodeiOS4

此外,尝试使用来自 Subversion 存储库的最新 1.x 分支,对 iOS 支持进行了一些修复。

于 2011-09-22T20:23:54.260 回答