Android sipdemo拨打电话时超时

Android sipdemo拨打电话时超时,android,sip,Android,Sip,打电话时android sipdemo超时出现问题。电话上的本机sip客户端没有呼叫问题,工作正常。当我在sipdemo中启动调用时,我在logcat中得到一个超时。超时设置为30秒的标准时间。。本地星号框是其连接的对象。注册很好。像这样很难说。尝试使用捕获包,过滤SIP协议,并查看通过网络发送的内容。还可以使用本机客户端进行尝试,并将其与sipdemo进行比较 另一个起点是asterisk实例的日志(systemlog) 如果你自己不能弄清楚,就把结果贴在这里。像这样很难说。尝试使用捕获包,过

打电话时android sipdemo超时出现问题。电话上的本机sip客户端没有呼叫问题,工作正常。当我在sipdemo中启动调用时,我在logcat中得到一个超时。超时设置为30秒的标准时间。。本地星号框是其连接的对象。注册很好。

像这样很难说。尝试使用捕获包,过滤SIP协议,并查看通过网络发送的内容。还可以使用本机客户端进行尝试,并将其与sipdemo进行比较

另一个起点是asterisk实例的日志(systemlog)


如果你自己不能弄清楚,就把结果贴在这里。

像这样很难说。尝试使用捕获包,过滤SIP协议,并查看通过网络发送的内容。还可以使用本机客户端进行尝试,并将其与sipdemo进行比较

另一个起点是asterisk实例的日志(systemlog)


如果你自己无法解决,请将结果发布在这里。

我也有同样的问题。 我在wireshark中追踪了包裹,以下是我发现的:

  • 我在SipDemo中注册到SIP服务器
  • 我注册到桌面上的SIP服务器(使用Ekiga)
  • 我在SipDemo打电话给Ekiga
  • 邀请消息被发送到Ekiga
  • 尝试从Ekiga发送到服务器
  • 铃声从Ekiga发送到SipDemo
  • 我接Ekiga客户的电话
  • OK(带会话描述)从Ekiga发送到SipDemo。这在Ekiga放弃之前发生了11次
  • BYE从Ekiga客户端发送到SipDemo
  • 请注意,在Ekiga放弃并结束通话之前,OK被发送了11次。这就是为什么通话只持续30秒

    如果您在此处查看RFC: 第13.3.1.4节

    您可以看到Ekiga放弃SipDemo客户端的原因是它从未从SipDemo获得ACK

    我相信这是安卓的bug,但我无法想象他们在SIP实现中会错过这样基本的东西

    在接下来的几天里,我将尝试在android源代码中找到一些答案

    我将尝试查看在两个SipDemo应用程序之间建立调用时会发生什么。如果它能工作,那意味着安卓只会同时忽略ACK

    编辑: 我刚试过两个SipDemo客户之间的电话。它发送OK 5次并放弃OK,但不结束通话。有趣的行为:)

    编辑2: 我找到了androids的SIP实现,我发现ACK应该被发送。。。即使logcat也会记录,但我在Wireshark中仍然看不到任何东西。我想它可能被屏蔽了,所以我在设备上运行了Shark(比如android的Wireshark),把垃圾堆拉到我的笔记本电脑上,在Wireshark中打开它,我在任何地方都看不到ACK。我甚至看了所有的包。。。没有过滤器,只是以防万一我可能会过滤掉它。无论如何。。。以下是我在android代码中发现的内容: 类别:SipSessionImpl 方法:私有布尔outgoingCall(EventObject evt) 在case Response.OK中: 您可以看到此呼叫: mSipHelper.sendInviteAck(事件,mDialog)

    在SipHelper的sendInviteAck方法中,您可以看到: 如果(调试)Log.d(标记“发送确认:+ACK”); dialog.sendAck(ack)

    对话框是nist javax.sip,所以我认为没有必要再进一步。。。 运行应用程序时,我在日志中看到此消息“send ACK”

    编辑3:
    我注意到这个问题只发生在一些SIP服务器上。我现在尝试了opensips,效果很好。我想我遇到的问题是服务器响应androids keep alive OPTIONS消息时没有找到404。然后,android试图尽快停止使用服务器。正因为如此,android一获得对等客户端的地址,就试图直接发送消息,但失败了,我也遇到了同样的问题。 我在wireshark中追踪了包裹,以下是我发现的:

  • 我在SipDemo中注册到SIP服务器
  • 我注册到桌面上的SIP服务器(使用Ekiga)
  • 我在SipDemo打电话给Ekiga
  • 邀请消息被发送到Ekiga
  • 尝试从Ekiga发送到服务器
  • 铃声从Ekiga发送到SipDemo
  • 我接Ekiga客户的电话
  • OK(带会话描述)从Ekiga发送到SipDemo。这在Ekiga放弃之前发生了11次
  • BYE从Ekiga客户端发送到SipDemo
  • 请注意,在Ekiga放弃并结束通话之前,OK被发送了11次。这就是为什么通话只持续30秒

    如果您在此处查看RFC: 第13.3.1.4节

    您可以看到Ekiga放弃SipDemo客户端的原因是它从未从SipDemo获得ACK

    我相信这是安卓的bug,但我无法想象他们在SIP实现中会错过这样基本的东西

    在接下来的几天里,我将尝试在android源代码中找到一些答案

    我将尝试查看在两个SipDemo应用程序之间建立调用时会发生什么。如果它能工作,那意味着安卓只会同时忽略ACK

    编辑: 我刚试过两个SipDemo客户之间的电话。它发送OK 5次并放弃OK,但不结束通话。有趣的行为:)

    编辑2: 我找到了androids的SIP实现,我发现ACK应该被发送。。。即使logcat也会记录,但我在Wireshark中仍然看不到任何东西。我想它可能被屏蔽了,所以我在设备上运行了Shark(比如android的Wireshark),把垃圾堆拉到我的笔记本电脑上,在Wireshark中打开它,我在任何地方都看不到ACK。我甚至看了所有的包。。。没有过滤器,只是以防万一我可能会过滤掉它。无论如何。。。以下是我在android代码中发现的内容: 类别:SipSessionImpl 方法:私有布尔outgoingCall(EventObject evt) 在case Response.OK中: 您可以看到此呼叫: mSipHelper.sendInviteAck(事件,mDialog)

    在SipHelper中,方法sendInviteA