2012-02-19 107 views
1

拨打电话时android sipdemo超时出现问题。手机上的本地SIP客户端没有问题,完美无缺。它当我在sipdemo中发起呼叫时,我在logcat中得到一个超时。超时设置为30秒的标准..本地星号框是它连接到的。注册成功。拨打电话时Android sipdemo超时

回答

1

我遇到同样的问题。 我追查在Wireshark的包,这里是我的发现:

  1. 我注册到SIP服务器SipDemo
  2. 我注册(使用的Ekiga)
  3. 我放在SipDemo到的Ekiga呼叫到SIP的桌面服务器。
  4. INVITE消息被发送到的Ekiga
  5. 试图从的Ekiga发送到服务器
  6. 铃声是从的Ekiga发送到SipDemo
  7. 我回答的Ekiga客户端上的电话
  8. OK(带会话描述)是从Ekiga发送到SipDemo。出现这种情况的11倍之前的Ekiga只是放弃
  9. BYE从的Ekiga客户端发送到SipDemo

请注意,确定正在发送11次前的Ekiga只是放弃,并挂断电话。这就是通话持续30秒的原因。

如果你看看在RFC这里: http://www.ietf.org/rfc/rfc3261.txt部分13.3.1.4

可以看到的Ekiga被放弃SipDemo客户端上的原因是因为它从来没有得到ACK从SipDemo回来。

我相信这是android bug,但我无法想象他们可能在他们的SIP实现中遗漏了这些基本的东西。

在接下来的几天里,我会尝试在Android源代码,以发掘一些答案......

我会尽力看到建立2个SipDemo应用程序之间的调用时会发生什么。如果它有效,那意味着android只会一起忽略ACK。

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

EDIT2: 我挖出了androids的SIP实现,我发现应该发送ACK ...甚至logcat记录这一点,但我仍然没有看到任何Wireshark。我想也许它被阻塞了,所以我在设备上运行了鲨鱼(比如安卓版的Wireshark),将转储转移到了我的笔记本电脑上,在Wireshark中打开了它,并且我没有在任何地方看到ACK。我什至看到槽所有数据包...没有过滤器,以防万一我可能会过滤出来。反正...这是我在Android的代码中发现: http://hi-android.info/src/com/android/server/sip/SipSessionGroup.java.html 类:SipSessionImpl 方法:私人布尔outgoingCall(EVT的EventObject) 的情况下,Response.OK: 你可以看到这个调用: mSipHelper.sendInviteAck(事件,支持mDialog );如果(DEBUG)Log.d(TAG,“send ACK:”+ ack);如果(DEBUG)Log.d(TAG,“send ACK:”+ ack); dialog.sendAck(ack);

Dialog是NIST javax.sip,所以我不认为有必要进一步去... 运行的应用程序

EDIT3,当我看到这则消息,我logcat的“发送ACK”: 我注意到这个问题只发生在一些SIP服务器上。我现在试过opensips,它工作正常。我想我遇到的问题与服务器响应与404未找到的androids保持活动选项消息。然后,android试图尽可能不使用服务器。因此,一旦android获得了其对等客户端的地址,它试图发送一条直接消息,并失败

+0

不错的工作谢谢你们 – tommo 2012-02-26 05:51:30

0

很难说就这样。尝试使用wireshark捕获软件包,筛选SIP协议并查看通过网络发送的内容。也可以用本地客户端尝试它并将其与sipdemo进行比较。

另一个出发点是你的星号实例(systemlog)

的日志如果你不能弄清楚自己,在这里发表的结果。