我正在使用本机sip api实现Android应用程序中的sip呼叫,它能够正常工作,但在某些设备上,如CANVAS 3,则无法正常工作。调试后,我发现这段代码返回NULL
**manager = SipManager.newInstance(ctx);**
这意味着该设备不支持Sip Apis。但是在同一设备上,像SipDroid等其他用于sipcalling的应用程序正常工作。这是如何可能的?它们不使用本机sip Apis吗?
我正在使用本机sip api实现Android应用程序中的sip呼叫,它能够正常工作,但在某些设备上,如CANVAS 3,则无法正常工作。调试后,我发现这段代码返回NULL
**manager = SipManager.newInstance(ctx);**
这意味着该设备不支持Sip Apis。但是在同一设备上,像SipDroid等其他用于sipcalling的应用程序正常工作。这是如何可能的?它们不使用本机sip Apis吗?
你可以选择使用自定义的Sip库。
Android第三方开源sip堆栈库
有不同的开源项目在其项目中使用了这些库。
开源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)
来自此处的指南。
补充一下SilentKiller的回答,我想对this的问题给出我的答案,但是请记住,选择一个堆栈是一个相当复杂的任务,取决于您的目标和偏好。
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集成到您的项目中,也非常完整,但可能会更复杂和沉重。
希望这可以帮助到您。