我正在使用pjsip进行VOIP呼叫。为了节省电池寿命,策略是在呼叫结束时取消注册和删除SIP帐户。 GCM会通知来电,这将触发注册SIP帐户。
这有效,但不稳定。有时应用程序在pjsip本机层崩溃(我怀疑是因为gc在错误的线程上启动了吗?)。
我在所有事情上小心地调用.delete()。但这没有用。有时我会在崩溃前做10-15个电话。但在其他设备上很少。
崩溃我只是给了我一个无益的致命信号11:
10-27 22:53:23.045 1068-2014/com.funbers.app /System.out﹕ 22:53:23.204 pjsua_core.c .RX 619 bytes Response msg 200/REGISTER/cseq=24488 (rdata0x613e2540) from TLS 162.209.100.164:5061:
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ SIP/2.0 200 OK
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ Via: SIP/2.0/TLS 85.225.249.21:46425;branch=z9hG4bKPjQ71QoAFam.OlO6FEvuVz2gM5PPu4DWmH;alias;received=85.225.249.21;rport=46425
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ From: "12025999147" <sip:1112220002QQQ140431267693@devastus01.funbers.net>;tag=XvzX1mdof0g94DVFNNaryzYNTCpwFwD0
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ To: "12025999147" <sip:1112220002QQQ140431267693@devastus01.funbers.net>;tag=as7431db35
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ Call-ID: naIKdyL6kahHCqtpDB9mKwGs3IVssYbq
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ CSeq: 24488 REGISTER
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ Server: Asterisk
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ Supported: replaces, timer
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ Expires: 0
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ Date: Mon, 27 Oct 2014 21:53:26 GMT
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ Content-Length: 0
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ [ 10-27 22:53:23.200 1068: 2014 I/System.out ]
10-27 22:53:23.200 1068-2014/com.funbers.app I/System.out﹕ --end msg--
10-27 22:53:23.210 1068-2014/com.funbers.app I/System.out﹕ 22:53:23.214 pjsua_acc.c ...."12025999147" <sip:1112220002QQQ140431267693@devastus01.funbers.net;transport=tls>: unregistration success
10-27 22:53:23.210 1068-2014/com.funbers.app D/Funbers﹕ notifyRegState: code: 200, reason: OK, expiration: 0
10-27 22:53:23.215 1068-2014/com.funbers.app D/Funbers﹕ Delete account (notifyRegState)
10-27 22:53:23.220 1068-2014/com.funbers.app I/System.out﹕ 22:53:23.229 pjsua_acc.c ....Deleting account 0..
10-27 22:53:23.225 1068-2014/com.funbers.app I/System.out﹕ 22:53:23.229 pjsua_acc.c .....Account id 0 deleted
10-27 22:53:23.225 1068-2014/com.funbers.app A/libc﹕ Fatal signal 11 (SIGSEGV) at 0x24656369 (code=1), thread 2014 (com.funbers.app)
现在我想知道,在通话结束后取消注册/删除帐户是一个好主意。或者应该啜饮帐户只是保持活着(每隔几分钟重新注册一次)?将背景中的sipservice活着耗尽吗?
或者我可以在注册/取消注册电话中遗漏某些内容。顺便说一句,我取消注册:
account.setRegistration(false);
然后在执行之前等待注册更改通知:
account.delete();
account = null;
答案 0 :(得分:0)
在我的情况下,我删除了通话,就像同时拨打电话一样:
call.makeCall(buddy_uri,prm); call.delete();
然后我简单地使用它:
call.makeCall(buddy_uri,prm);
答案 1 :(得分:0)
在每次结束通话后,我认为取消注册帐户不是一个好主意。我强烈建议你保持帐户注册活着,电池寿命实际上不会影响太多。我甚至在应用程序中有一个后台服务,这意味着当应用程序被销毁时,sip帐户注册仍然存在。在我看来,你不应该担心手机的电池寿命,如果这是你在结束通话后想要取消注册帐户的唯一原因。如果您希望能够销毁pjsip并取消注册帐户,您可以从应用程序向用户提供通知,该通知是交互式的,用户可以手动取消注册。我很了解你,但发送GCM通知并不是你在Android中制作VOIP应用程序的方式,它听起来更像是iOS的东西。在iPhone中,您希望发送PushKit通知以唤醒VOIP应用程序,但我永远不会对Android使用相同的方法。
答案 2 :(得分:-1)
如果您在挂断电话时未发布VideoPreview,则崩溃时间将少于释放VideoPreview。