【问题标题】:SipApi not supported by some device某些设备不支持 SipApi
【发布时间】:2013-12-14 20:24:25
【问题描述】:

我正在使用本机 sip apis 在 android 应用程序中实现 sip 调用,它工作正常,但在 CANVAS 3 等某些设备中它不工作。调试后我发现这行代码返回 NULL

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

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

【问题讨论】:

  • 您可以为 Sip 构建自己的库
  • @SilentKiller 好的,所以那个 lib 不会使用本机 sip api ???
  • 不。所有类都在 JNI 中。
  • @SilentKiller 你能给我一些链接,我可以找到如何做到这一点

标签: android sip sipdroid


【解决方案1】:

您可以使用自定义 SipLibraries。

适用于 Android 的第三方开源 sip 堆栈库

  1. 耆那教啜饮:http://jsip.java.net/
  2. Pjsip:http://www.pjsip.org/
  3. Mjsip:http://mjsip.org/mjua.html
  4. 豆瓣: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 using external JAIN-SIP(J-SIP) Stack | Classpath

第三方:MjSIP 优点:SipDroid 是建立在它之上的。 (提供源代码)(red5phone 是另一个项目) 缺点:不完全符合 RFC?缺乏教程(尽管有 Javadocs)。开发几乎死了

第三方:Doubango框架 优点:IMSDroid是建立在它之上的。 (提供源代码) 缺点:生成的 apk 文件大小往往“很大”(>15MB,如此处所述)

已关注from

【讨论】:

  • 伙计,你的帖子和this一模一样;-)
  • @jcm 我想我也给出了链接。可能由某人更新。
  • 抱歉,我不想因为我想起这篇文章而感到不安,并认为 mrodriguez 对 Jain SIP 不太公平。
  • @jcm 它不像我添加了那个链接,因为我只使用了那个东西。但不知道那个链接去哪里了,所以再次添加没有不安,每件事都已经准备好了.. ;)
  • 我认为我的answer 被复制了两次。
【解决方案2】:

为了补充 SilentKiller 的回复,我会将我的回答转发给 this 问题,但请记住,选择堆栈是一项相当复杂的任务,取决于您的目标和偏好。


Android SIP Stack 中继旧的JAIN SIP 版本以及一些扩展(IMS、支持 RTP 等)。这个堆栈的主要问题是,在大多数设备中,它只能通过 WiFi 工作,而不是 3G 或 LTE(请注意,android.net.sip.SipManager 包含方法 isSipWifiOnly 以了解是否启用了此限制)。

另一方面,pjsip 非常完整,就像他们说的那样,它不是一个 SIP 堆栈,而是一个完整的多媒体通信库。它的用途非常广泛:您可以使用大量配置或将其作为simple user agent 运行。它适用于任何类型的数据连接(不限于 WiFi)。

现在比较:在我看来,pjsip 更完整、更通用,但更难与您的项目集成(使用 Android SIP Stack,一切都保留在 SDK 环境中,而使用 pjsip,您需要使用NDK 和 JNI 库)。

我的意见:如果您打算创建一个非常简单的 SIP 应用程序并且您不介意 WiFi 限制,我认为,最好使用本地 SIP API,但是,如果您打算改进它并做更多的事情“有趣”,我强烈推荐pjsip。我同时使用了 JAIN SIP 和 pjsip,我再次投票支持 psip。但这只是我的看法。


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

希望这会有所帮助。

【讨论】:

  • 非常感谢您提供如此简短易懂的解释。我尝试按照它提供的步骤集成 pjsip,但您已经知道它非常复杂,所以请您指导我应该如何启动它,我的意思是我应该先学习什么。
  • 也在它不工作的设备中我检查了方法 IsSipWifiOnly 并且它返回 false 这意味着关于 wifi 没有问题。
  • @Bansal_Sneha 是的,没问题。第一步是习惯于为 android 构建 pjsip,请查看this 响应以获取此分步指南。
  • 对不起这个问题,但我没有得到如何在我的中实现 pjsip lib 所以我已经构建了 csipsipmple 项目并且它运行良好。你能告诉我如何使用它的 jni 还是有可能用还是不用?
  • @Bansal_Sneha 抱歉,虽然我对 CSipSimple 源代码有一些经验,但我不太了解它的 JNI。当然可以在您的项目中使用它(您可以查看 src/com/csipsimple/pjsip 包以获取有关如何与生成的库交互的一些提示),但我认为它会非常复杂。通常,您应该创建一个包装 pjsua 调用的 JNI 库并将其添加到您的项目中。您可以使用 pjsip-apps/src/samples/simple_pjsua.c(非常简单的 SIP 客户端)作为参考来创建这个包装器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多