在拨打电话时遇到android sipdemo超时的问题。手机上的原生sip客户端没有问题呼叫,工作完美。当我在sipdemo中启动调用时,我在logcat中获得超时。超时设置为30秒的标准..本地星号框是它连接的。注册很好。
答案 0 :(得分:1)
我遇到了同样的问题。 我在wireshark中追踪了包裹,这就是我发现的:
请注意,在Ekiga放弃并结束通话之前,OK正在发送11次。这就是为什么通话只持续30秒。
如果您在这里查看RFC: http://www.ietf.org/rfc/rfc3261.txt第13.3.1.4节
你可以看到Ekiga放弃SipDemo客户端的原因是因为它永远不会从SipDemo得到回应。
我相信这是安卓漏洞,但我无法想象他们在SIP实施中可能会遗漏这些基本内容。
在接下来的几天里,我将尝试在android源代码中挖掘一些答案......
我会尝试看看在2个SipDemo应用程序之间建立调用时会发生什么。如果它工作,这意味着android只会一起忽略ACK。
编辑: 我刚尝试了两个SipDemo客户端之间的通话。它发送OK 5次并放弃OK,但不结束通话。有趣的行为:)
EDIT2: 我挖出了机器人SIP实现,我发现ACK应该被发送...甚至logcat记录这个,但我仍然在Wireshark中看不到任何东西。我想也许它会被阻塞或什么的,所以我在设备上运行Shark(比如Wireshark for android),将转储拉到我的笔记本电脑,在Wireshark中打开它,我在任何地方都看不到ACK。我甚至看了所有数据包...没有过滤器,以防万一我可能会过滤掉它。无论如何......这是我在android代码中找到的: http://hi-android.info/src/com/android/server/sip/SipSessionGroup.java.html class:SipSessionImpl 方法:private boolean outgoingCall(EventObject evt) 以防Response.OK: 你可以看到这个电话: mSipHelper.sendInviteAck(event,mDialog);
在SipHelper方法sendInviteAck中,您可以看到: if(DEBUG)Log.d(TAG,“发送ACK:”+ ack); dialog.sendAck(ACK);
Dialog是nist javax.sip,所以我认为不需要进一步...... 我在运行应用程序时在logcat中看到此消息“发送ACK”
EDIT3: 我注意到只有某些SIP服务器才会出现此问题。我现在尝试使用opensips,它工作正常。我想我遇到的问题与服务器响应orroids keep-alive OPTIONS消息有404 Not Found。然后,android试图尽快不使用服务器。因此,一旦android获得其对等客户端的地址,它就会尝试发送直接消息,并且失败
答案 1 :(得分:0)
很难说就是这样。尝试使用wireshark捕获包,过滤SIP协议并查看通过网络发送的内容。也可以尝试使用本机客户端并将其与sipdemo进行比较。
另一个起点是星号实例(systemlog)的日志
如果您无法自己弄明白,请在此处发布结果。