2011-11-29 210 views
0

我有一个应用程序基于pjsip做一些SIP呼叫。FreeSwitch iPhone应用程序通信问题

该应用可以很好地与其他SIP交换机/服务器配合使用,但freeSwitch应用在后台模式下没有收到呼叫。

随着freeSwitch一切正常,当应用程序处于活动状态,但在后台模式时,应用程序未被通知有关通话。它可能与freeSwitch如何通知应用程序有关新调用有关(对于iOS pjsip,通知应该在TCP包装套接字上)。

剂量任何人都知道我可以配置fresSwitch在特定端口上发送通知?

+0

您的应用程序是否注册到FreeSWITCH?这可能是因为注册已超时,FreeSWITCH不知道您的应用端点在哪里。调试7在FreeSWITCH中显示的是什么?你能解释更多关于你之后的功能么? –

+0

该应用程序已注册,因为如果我打开该应用程序(从后台),我收到通话通知。 – alinoz

回答

0

我奶源中加入来解决这个问题:

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

到freeswitch_install_folder/conf目录/目录/默认/ XYZ.xml(其中XYZ是您所配置的用户)下的变量。

0

你不想在Freeswitch中为iOS使用ndlb-connectile-dysfunction(ndlb)。这样做可以保证您无法在后台打开足够长时间的注册,因为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:处理器:),与处理器以最小值(600秒)进行重新注册。

2)请确保您的应用程序配置为VOIP 音频播放背景模式它的Info.plist

3)请确保您的客户端注册为使用VOIP网络流接口在那些苹果指出准则。这样操作系统可以让应用程序进入休眠状态,但是如果在该网络流上发生传入流量,则会唤醒您。

如果你做了所有这三个,你应该可以在iOS 5的后台运行voip,即使屏幕锁定。

+0

您和应用程序提到的所有步骤是否与其他SIP服务器一起运行良好,但它在FreeSwitch服务器的后台模式下无法使用。问题不在iOS端。 – alinoz

+0

您是否使用TCP进行SIP注册?我在后台模式下使用FreeSwitch和iOS 5没有问题。无论如何,用户将希望远离NDLB设置。 –

+0

为了澄清,如果您使用NDLB设置,它几乎不会工作,并且它与iOS无关 - 这是因为服务器没有向手机发送任何内容,因为注册已过期30注册后数秒。为了从Freeswitch获得更好的调试信息,它应该以:'> TPORT_LOG = 1开始。/ freeswitch' - 然后它只是确保服务器正在发送调用(在服务器日志中可见),并且操作系统正在唤醒应用程序以接收它(在回调中放入日志)。 –