【问题标题】:SIP signal with public wifi?带有公共wifi的SIP信号?
【发布时间】:2015-09-16 08:53:21
【问题描述】:

我遇到了 Jain SIP 的问题。我的应用程序用于拨打 VOIP 电话。它适用于以太网,但在公共 Wifi 中却失败了。

以下是我发送的用于登录 SIP 服务器的包。似乎服务器没有响应任何数据(它在以太网上工作)

REGISTER sip:sip.linphone.org:5060 SIP/2.0
Call-ID: 56866e2b305987eac0d6e8bee07c6f69@192.168.56.1
CSeq: 1 REGISTER
From: "myaccount" <sip:myaccount@sip.linphone.org>;tag=647554
To: "myaccount" <sip:myaccount@sip.linphone.org>
Via: SIP/2.0/UDP 192.168.56.1:5075;branch=z9hG4bK-333032-33f14b15adbdc0cd848ccd102acb2b45
Max-Forwards: 70
Contact: <sip:192.168.56.1:5075>
Expires: 60000
Content-Length: 0

有人有什么想法吗?

【问题讨论】:

    标签: java sip jain-sip


    【解决方案1】:

    这很可能是 NAT/防火墙问题。如果 sip.linphone.org 在您的 Wifi 上正确解析,首先检查 DNS。其次,您在 NAT 之后并且正在通告私有 IP 192.168.56.1,因此远程端必须能够找到您的公共 IP,这并不总是可能的。您将需要查看 STUN 和 STUN4j(如果这还不够,然后是 TURN 和 ICE)来找到您自己的公共 IP 和端口,linphone 已经在 stun.linphone.org 托管了一个 stun 服务器来帮助您。 NAT 穿越可能相当复杂。如果您有公共 IP 和端口,只需输入公共 IP 即可。

    另一件事是您没有在此处发送任何 SDP,因此 SDP 可能无关紧要。但是,如果您稍后有 SDP 和 RTP,那么您可能需要查看 TURN 和 ICE 以放入 SDP 并通过第三方中继 RTP。这取决于远程端支持什么,并且取决于您的 NAT 配置。有时远程服务器会像您现在发送 REGISTER 一样正常工作,但有时它们需要很多额外的东西,或者它们可能根本无法工作。

    【讨论】:

    • 谢谢弗拉基米尔,你知道使用 STUN/STUN4j/TURN/ICE 的任何例子吗?顺便说一句,我们使用 kamalio 作为 SIP 服务器。
    • 一件事,我在以太网后面运行这段代码(相同的数据包)。然后就可以了!?
    • Kamailio 可以配置为解决您的 NAT 问题,但您必须阅读 kamailio 中有关 NAT 的文档。 STUN 和 TURN 很复杂,它们更多的是关于您稍后可能会遇到 RTP 和 SDP 的后续问题,所以暂时不要考虑这个问题。您可以查看 jitsi 电话作为一个完整的示例,在 Java 中支持 STUN 和 TURN 和 ICE。
    • 谢谢,你的回答和评论对我有很大帮助:) 我会先用jitsi手机试试。
    【解决方案2】:

    这不是一个 peivate/公共 IP 问题。至于您的 SIP 服务器托管在公共 IP 中(这很正常),您的客户端是否在私有 IP 中并不重要。

    查看您的 SIP 消息。您正在为 SIP 服务器提供您的私有 IP。

    呼叫 ID:56866e2b305987eac0d6e8bee07c6f69@192.168.56.1

    只需将 IP 地址更改为您的公共 IP。如果您不知道您的外部 IP,那么您需要学习如何获取它。

    【讨论】:

    • Call-ID 只是一个唯一标识符:本地 IP 是完全正确的。 Call-ID 标头的 [@host] 部分甚至是可选的。
    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 2014-07-25
    • 2013-10-17
    • 1970-01-01
    相关资源
    最近更新 更多