某些设备不支持SipApi

3

我正在使用本机sip api实现Android应用程序中的sip呼叫,它能够正常工作,但在某些设备上,如CANVAS 3,则无法正常工作。调试后,我发现这段代码返回NULL

 **manager = SipManager.newInstance(ctx);**

这意味着该设备不支持Sip Apis。但是在同一设备上,像SipDroid等其他用于sipcalling的应用程序正常工作。这是如何可能的?它们不使用本机sip Apis吗?


2
你可以为Sip构建自己的库。 - SilentKiller
@SilentKiller 好的,那么这个库不会使用本地的SIP API吗? - Sneha Bansal
1
不行,所有的类都将在 JNI 中。 - SilentKiller
@SilentKiller,你能给我提供一些链接吗?我想找到如何做这件事的方法。 - Sneha Bansal
2个回答

5

你可以选择使用自定义的Sip库。

Android第三方开源sip堆栈库

  1. Jain sip: http://jsip.java.net/
  2. Pjsip: http://www.pjsip.org/
  3. Mjsip: http://mjsip.org/mjua.html
  4. Doubango: http://www.doubango.org/

有不同的开源项目在其项目中使用了这些库。

  1. Jain sip: 没有在“著名”应用程序中使用。
  2. Sipdroid使用MjSip
  3. Csipsimple使用PjSip
  4. Imsdroid使用doubango。

开源SIP堆栈:Android SDK的默认实现(API>9) 优点:有文档可用。易于理解。 缺点:由于运营商限制,不支持所有设备。仅适用于WiFi。无法更改编解码器。

第三方:JainSIP 优点:Oracle(Sun)项目==>积极开发。看起来比MjSIP更容易(有更多文档)。 缺点:无 Android 2.3使用外部JAIN-SIP(J-SIP)堆栈|类路径

第三方:MjSIP 优点:SipDroid是基于它构建的。(可用源代码)(red5phone是另一个项目) 缺点:不完全符合RFC?缺乏教程(虽然有Javadocs)。开发几乎停滞不前

第三方:Doubango框架 优点:IMSDroid是基于它构建的。(可用源代码) 缺点:生成的apk文件大小往往会很“沉重”(如此处所述>15MB)

来自此处的指南。


哥们,你的帖子跟这个链接一模一样啊 ;-) - jcm
@jcm 我想我已经给出了链接。可能被其他人更新了。 - SilentKiller
抱歉,我并不想让你不高兴,只是我回想起那篇帖子,认为mrodriguez对Jain SIP的评价不太公正。 - jcm
1
@jcm,这不是我添加了那个链接,因为我只使用了那个东西。但是不知道那个链接去哪了,所以重新添加了一次,不要心烦,一切都已经设置好了.. ;) - SilentKiller
我认为我的答案被复制了两次。 - JohnTube

4

补充一下SilentKiller的回答,我想对this的问题给出我的答案,但是请记住,选择一个堆栈是一个相当复杂的任务,取决于您的目标和偏好。


Android SIP Stack依赖于旧版JAIN SIP及其扩展(IMS,支持RTP等)。该堆栈的主要问题在于,在大多数设备上,它仅通过WiFi工作,不支持3G或LTE(请注意,android.net.sip.SipManager包含方法isSipWifiOnly以了解是否启用此限制)。
另一方面,pjsip非常完整,就像他们所说,它不是一个SIP堆栈,而是一个完整的多媒体通信库。它非常灵活:您可以使用大量配置或仅将其作为简单用户代理运行。它适用于任何类型的数据连接(不限于WiFi)。
现在进行比较:我认为pjsip更完整、更灵活,但与您的项目集成更加困难(使用Android SIP Stack时,所有内容都保留在SDK环境中,而使用pjsip则需要使用NDK和JNI库)。

我的观点:如果您计划创建一个非常简单的SIP应用程序,而且您不介意WiFi的限制,我认为最好使用本机SIP API,但是,如果您计划改进它并做一些更“有趣”的事情,我强烈推荐使用pjsip。我已经使用过JAIN SIP和pjsip,再次强烈推荐pjsip。但这只是我的个人观点。


还有另一个值得检查的第三方堆栈: Linphone。它也像pjsip一样通过JNI集成到您的项目中,也非常完整,但可能会更复杂和沉重。

希望这可以帮助到您。


非常感谢您提供如此简明易懂的解释。我尝试按照pjsip提供的步骤进行集成,但正如您所知道的那样,这相当复杂,所以您能否指导我应该如何开始,我的意思是我需要先学习什么。 - Sneha Bansal
在设备上无法工作的情况下,我检查了IsSipWifiOnly方法,并返回了false,这意味着wifi没有问题。 - Sneha Bansal
@Bansal_Sneha 没问题。第一步是熟悉如何为Android构建pjsip,请查看这个回答,以获取逐步指南。 - jcm
抱歉问这个问题,我不知道该如何在我的项目中实现pjsip库,所以我已经构建了csipsimple项目并且它运行良好。请问您能告诉我如何使用其JNI或是否可能使用它吗? - Sneha Bansal
@Bansal_Sneha 很抱歉,虽然我有一些CSipSimple源代码的经验,但我对它的JNI并不是很熟悉。当然,你可以在你的项目中使用它(你可以查看src/com/csipsimple/pjsip包以获取如何与生成的库进行交互的一些提示),但我认为这可能会相当复杂。通常,你应该创建一个JNI库来封装pjsua调用,并将其添加到你的项目中。你可以使用pjsip-apps/src/samples/simple_pjsua.c(非常简单的SIP客户端)作为参考来创建这个包装器。 - jcm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接