拨打电话时Android sipdemo超时

时间:2012-02-19 08:51:19

标签: android sip

在拨打电话时遇到android sipdemo超时的问题。手机上的原生sip客户端没有问题呼叫,工作完美。当我在sipdemo中启动调用时,我在logcat中获得超时。超时设置为30秒的标准..本地星号框是它连接的。注册很好。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。 我在wireshark中追踪了包裹,这就是我发现的:

  1. 我在SipDemo中注册到SIP服务器
  2. 我在桌面上注册SIP服务器(使用Ekiga)
  3. 我在SipDemo打电话给Ekiga。
  4. 邀请讯息被发送至Ekiga
  5. 尝试从Ekiga发送到服务器
  6. 响铃从Ekiga发送到SipDemo
  7. 我在Ekiga客户端上接听电话
  8. 确定(使用会话描述)从Ekiga发送到SipDemo。在Ekiga放弃之前,这种情况发生了11次
  9. BYE从Ekiga客户端发送到SipDemo
  10. 请注意,在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)的日志

如果您无法自己弄明白,请在此处发布结果。

相关问题