我使用原生sip apis在Android应用程序中实现sip调用它工作正常,但在某些设备如CANVAS 3中它无效。调试后我发现这行代码返回 NULL
**manager = SipManager.newInstance(ctx);**
那个设备不支持Sip Apis.But在同一设备上其他sipDroid等sipcalling应用程序正常工作。如何可能?他们是不是使用原生sip Apis ???
答案 0 :(得分:5)
您可以使用自定义SipLibraries。
适用于Android的第三方开源sip堆栈库
有不同的开源项目在他们的项目中使用了这些库。
开源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?缺乏教程(虽然可以使用Javadoc)。开发几乎已经死了
第三方:Doubango框架 优点:IMSDroid就是基于它构建的。 (可用源代码) 缺点:生成的apk文件大小往往是“重”(这里提到的大于15MB)
关注from
答案 1 :(得分:4)
为了补充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)集成到您的项目中,并且也非常完整,但可能更复杂和沉重。
希望这会有所帮助。