3

I am using native sip apis to implement sip calling in android app and it is working fine but in some devices like CANVAS 3 it was not working .After debugging I found this line of code was returning NULL

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

That measns that device does not support Sip Apis.But on the same device other application for sipcalling like SipDroid etc are working properly.How it is possible ?Are they do not use native sip Apis???

4

2 回答 2

5

您可以使用自定义 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 使用外部 JAIN-SIP(J-SIP) 堆栈 | 类路径

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

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

_

于 2013-12-14T11:30:36.863 回答
4

只是为了补充 SilentKiller 的回答,我会转发我对这个问题的回答,但是请记住,选择堆栈是一项非常复杂的任务,并且取决于您的目标和偏好。


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而且,我再次投票支持psip. 但这只是我的看法。


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

希望这可以帮助。

于 2013-12-14T12:24:25.923 回答