gpt4 book ai didi

调用电话时Android sipdemo超时

转载 作者:行者123 更新时间:2023-11-30 04:20:23 25 4
gpt4 key购买 nike

android sipdemo 有问题,打电话时超时。电话上的本地 sip 客户端通话没有问题,工作完美。当我在 sipdemo 中发起调用时,我在 logcat 中超时。超时设置为标准的 30 秒。它连接到一个本地星号框。注册正常。

最佳答案

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

  1. 我在 SipDemo 中注册到 SIP 服务器
  2. 我在桌面上注册到 SIP 服务器(使用 Ekiga)
  3. 我在 SipDemo 中给 Ekiga 打电话。
  4. INVITE 消息被发送到 Ekiga
  5. 尝试从 Ekiga 发送到服务器
  6. 振铃从 Ekiga 发送到 SipDemo
  7. 我在 Ekiga 客户端接听电话
  8. OK(带有 session 描述)从 Ekiga 发送到 SipDemo。在 Ekiga 放弃之前,这种情况发生了 11 次
  9. BYE 从 Ekiga 客户端发送到 SipDemo

请注意,在 Ekiga 放弃并结束通话之前,OK 被发送了 11 次。这就是通话仅持续 30 秒的原因。

如果您在这里查看 RFC: http://www.ietf.org/rfc/rfc3261.txt 13.3.1.4节

您可以看到 Ekiga 放弃 SipDemo 客户端的原因是因为它永远不会从 SipDemo 返回 ACK。

我相信这是 android 的错误,但我无法想象他们会在他们的 SIP 实现中错过这么基本的东西。

在接下来的几天里,我会尝试在android源代码中挖掘一些答案...

我会尝试看看在 2 个 SipDemo 应用程序之间建立调用时会发生什么。如果有效,则意味着 android 将完全忽略 ACK。

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

编辑2:我挖掘了 androids SIP 实现,我发现应该发送 ACK...即使 logcat 记录了这个,但我在 Wireshark 中仍然看不到任何东西。我想它可能被阻止了或什么的,所以我在设备上运行 Shark(如 Android 的 Wireshark),将转储拉到我的笔记本电脑,在 Wireshark 中打开它,但我没有在任何地方看到 ACK。我什至查看了所有数据包......没有过滤器,以防万一我可能会过滤掉它。无论如何......这是我在android代码中发现的: http://hi-android.info/src/com/android/server/sip/SipSessionGroup.java.html类:SipSessionImpl方法:private boolean outgoingCall(EventObject evt)如果 Response.OK:你可以看到这个电话:mSipHelper.sendInviteAck(事件, mDialog);

在SipHelper中,方法sendInviteAck,可以看到:如果(DEBUG)Log.d(TAG,“发送ACK:”+ ack);dialog.sendAck(ack);

Dialog 是 nist javax.sip,所以我认为没有必要更进一步...运行应用程序时,我在我的 logcat 中看到这条消息“发送 ACK”

编辑3:我注意到这个问题只发生在一些 SIP 服务器上。我现在尝试了 opensips,它工作正常。我想我遇到的问题与服务器响应 androids keep-alive OPTIONS 消息和 404 Not Found 有关。然后,android尽快尝试不使用服务器。因此,一旦 android 获得其对等客户端的地址,它就会尝试发送直接消息,但失败了

关于调用电话时Android sipdemo超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9347876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com