【问题标题】:FreeSwitch iPhone app communication issueFreeSwitch iPhone 应用程序通信问题
【发布时间】:2011-11-29 23:25:27
【问题描述】:

我有一个基于 pjsip 的应用程序,用于进行一些 Sip 调用。

该应用程序可与其他 SIP 交换机/服务器正常工作,但使用 freeSwitch 该应用程序无法在后台模式下接听电话。

使用 freeSwitch,当应用程序处于活动状态时一切正常,但在后台模式下,应用程序不会收到有关呼叫的通知。它可能与 freeSwitch 通知应用程序有关新呼叫的方式有关(对于 iOS pjsip,通知应该来自 TCP 包装的套接字)。

有人知道我如何配置 fresSwitch 以在特定端口上发送通知吗?

【问题讨论】:

  • 您的应用注册到 FreeSWITCH 了吗?可能是注册超时,FreeSWITCH 不知道你的应用端点在哪里。调试 7 在 FreeSWITCH 中显示什么?你能详细解释一下你所追求的功能吗?
  • 应用程序已注册,因为如果我(从后台)打开应用程序,我会收到来电通知。

标签: ios sip pjsip freeswitch sip-server


【解决方案1】:

我设法通过添加来解决这个问题:

<variable name="sip-force-contact" value="NDLB-connectile-dysfunction"/>

进入变量下的 freeswitch_install_folder/conf/directory/default/XYZ.xml(其中 XYZ 是您正在配置的用户)。

【讨论】:

    【解决方案2】:

    您不想将 ndlb-connectile-dysfunction (ndlb) 用于带有 Freeswitch 的 iOS。这样做将保证您不能将注册打开足够长的时间以在后台使用,因为当设置该选项时,Freeswitch 会将“expires=30”附加到所有注册。之后,您在尝试调用该用户时只会收到“USER_NOT_REGISTERED”错误,除非它恰好在注册调用后 30 秒内。

    您需要执行以下步骤: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW12

    具体来说:

    1) 确保您有一个正在运行的 iOS 保持活动计时器 (setKeepAliveTimeout:handler:),处理程序块在最小值(600 秒)时重新注册。

    2) 确保您的应用在其 Info.plist 中配置为 VOIP音频播放背景模式

    3) 确保您的客户端正在为 VOIP 使用注册网络流接口,如 Apple 指南中所述。这样,操作系统可以让应用进入睡眠状态,但如果该网络流上出现传入流量,则会唤醒您。

    如果您完成了所有这三个操作,您应该能够在 iOS 5 的后台正常运行 voip,即使屏幕锁定也是如此。

    【讨论】:

    • 您提到的所有步骤都完成了,应用程序在其他 SIP 服务器上运行良好,但在 FreeSwitch 服务器的后台模式下无法正常工作。问题不在 iOS 端。
    • 您是否使用 TCP 进行 SIP 注册?在后台模式下使用带有 iOS 5 的 FreeSwitch 没有问题。无论如何,用户都希望远离 NDLB 设置。
    • 澄清一下,如果你使用 NDLB 设置,它几乎永远不会起作用,而且它与 iOS 无关——这是因为服务器没有向电话,因为注册在注册后 30 秒过期。为了从 Freeswitch 获得更好的调试信息,它应该从:&gt;TPORT_LOG=1 ./freeswitch 开始——然后只需确保服务器正在发送调用(在服务器日志中可见),并且操作系统正在唤醒应用程序接收它(在回调中放一个日志就可以了)。
    • 再次使用此选项可以正常工作,没有它不工作!我可以更清楚吗?问题是在后台模式下,应用程序应该在同一个 TCP 端口上接收通信。 freeSwitch 内部可能存在错误,并且通过启用此功能可以绕过错误。 NDLB 设置做了几件事,其中之一是“将强制 FreeSWITCH 将 SIP 响应发送到接收它们的网络端口”。
    • 这不是我发布这个的原因。我会告诉你,正在发生的事情可能不是你认为正在发生的事情,但如果“有效/无效”是你想去的深度,那是你的特权。关键是那些在 iOS 上寻求帮助并找到这篇文章的人不应该遵循使用该 NDLB 设置的建议。他们应该找出进程的哪个阶段失败(NAT 遍历、SIP 注册、从睡眠中自动唤醒等),然后修复它。如果 NDLB 似乎在进行扩展测试,那么很可能应用程序在进入后台时并未处于睡眠状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多