【问题标题】:iOS Unable to "Configure one of the app’s sockets for VoIP usage" for background modeiOS 无法为后台模式“配置应用程序的一个套接字以使用 VoIP”
【发布时间】:2013-03-04 08:32:20
【问题描述】:

我正在尝试设置我的应用程序以侦听 tcp-socket,即使在应用程序暂停时也是如此。如苹果文档中所述,我在 Info.plist 中设置了 voip-background 模式。现在我被困在哪里说:“配置应用程序的一个套接字以供 VoIP 使用。”。我正在尝试使用 CFReadStreamSetProperty() 方法来做到这一点,但关键是我如何创建套接字。套接字的创建是通过标准 C 库完成的,如下所示:

int mySock = socket(AF_INET, SOCK_STREAM, 0);

这是在现有库中的 .cpp 文件中完成的。这是我尝试为 VoIP 使用配置套接字:

CFStreamCreatePairWithSocket(kCFAllocatorDefault, sock, &readStream, &writeStream);
if(readStream && writeStream)
{
   CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
   CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
}

当我逐步浏览它时,它看起来不错,但不幸的是它不起作用。每当应用程序从前台转到后台/挂起时,连接就会丢失,并且来自服务器的任何输入都会被忽略。我不知道套接字的配置是否可以这样完成并且找不到答案。

【问题讨论】:

  • 您是否将您的应用程序注册为UIBackgroundModesvoip?如果不是这样,iOS 将不允许由于传入数据包而唤醒。
  • 我面临同样的问题(使用 posix 套接字进行 voip)。你设法让它工作了吗?

标签: ios objective-c sockets voip


【解决方案1】:

这是我在这个论坛的第一篇文章。 但我发现这是可行的。

  1. 在 info.plist 文件中设置 VOIP
  2. CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);

    CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);

  3. 使用 TCP 套接字

它不适用于 UDP 套接字。如果我错了,请编辑这篇文章。

【讨论】:

    【解决方案2】:

    您使用的是 iPhone 5S 还是 5C?

    尝试使用 iPhone 5 或 iPad 2 等设备

    这些设备存在一个关于 VOIP 套接字的已知问题(可能是 iPad Air,无法确认...),已报告错误报告,我们仍在等待 Apple 修复它...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多