【问题标题】:Ice-Lite on Android webrtc安卓 webrtc 上的 Ice-Lite
【发布时间】:2016-02-18 17:21:47
【问题描述】:

我想在 Android webrtc 中使用 Ice-Lite。
我想知道

  1. Ice-Lite 是服务器端组件还是客户端?
  2. Ice-Lite 如何在 Android 上实现?
  3. 如果使用 Ice-Lite,我们还需要 STUN 服务器吗?
  4. 当 Ice-Lite 用于 Android 时,ice-candidate 如何嵌入到 SDP 中?

我尝试在c=IN IP4 0.0.0.0 之后在SDP 中插入a=ice-lite 并仅将STUN 服务器传递给RTCConfig,但这似乎不起作用!另外,我只是在 IceGathering 完成后才发送报价和答复。

为了实现适用于 Android 的 Ice-Lite,我需要做些什么吗?

谢谢!

【问题讨论】:

    标签: android webrtc


    【解决方案1】:
    1. Ice-Lite 是服务器端组件还是客户端?

      两者都没有。 ICE 独立于“方”,因为它是为 p2p 制作的,所以在规范中一切都称为“客户端”。但是,鉴于它仅用于具有持久性、静态公共 IP 的客户端(这对于在公共 Internet 上运行的客户端-服务器连接中称为客户端的情况极为罕见),它实际上仅适用于网关和服务器。

    2. Ice-Lite 如何在 Android 上实现?

      事实并非如此。但是,有几个库实现了规范(lib nice,......)。

    3. 如果使用 Ice-Lite,我们还需要 STUN 服务器吗?

      是和否。您不需要 STUN 服务器来在公共 IP 上的客户端上获取自反候选者(呃!),但是,如果另一个客户端在 NAT 后面,则其他客户端将需要 STUN ,可能是 TURN,服务器建立与 ice-life 客户端的连接。

    4. 当 Ice-Lite 用于 Android 时,ice-candidate 是如何嵌入到 SDP 中的?

      与任何其他客户端相同。阅读规格。无论如何,您需要的不仅仅是在 SDP 中添加一个标志来启用 ice-lite。更多。

    【讨论】:

    • 不需要 STUN 服务器来获得完整 ICE 实现和 ICE lite 实现之间的 webrtc 对等连接。这是因为 ICE lite peer 将使用 Peer Reflexive Candidates 来为 NAT 后面的完整 ICE peer 获取候选人。
    • mattm,您只能从 stun 服务器获得反身候选人。如果您的客户端是 ICE-lite,那么它只生成主机候选者,如果您的客户端是完整的冰并且提供了一个 stun 服务器,那么该客户端也会生成 srflx 候选者并将它们发送给另一个(可能是冰精简版)客户端。所以ice-lire 客户端不需要访问STUN 服务器,但完整的ice 客户端需要。在您的解决方案中仍然需要 a STUN 服务器。
    • 您只能从 STUN 服务器获得服务器自反候选。当 ICE lite 对等点在连接检查过程中接收到流量时,它可以响应在传入数据包中可见的源地址(对等点自反候选)。我在不使用 STUN 服务器的情况下成功地在单独的 NAT 后面的完整 ICE 和 ICE lite 实现之间建立了连接。我相信这些都是符合标准的。
    【解决方案2】:

    您应该阅读RFC 5245,它以非常易读的术语描述了 ICE-lite。

    ICE-lite 预计只是实现完整 ICE 的垫脚石。如果端点有完整的实现,那么该端点可能不支持 ICE-lite 操作。

    为了在通话中使用 ICE,两个座席都需要支持 它。但是,某些代理将始终与公众联系 Internet 并且有一个可以接收数据包的公共 IP 地址 来自任何通讯员。为了使这些设备更容易 支持 ICE,ICE 定义了一种特殊类型的实现,称为 LITE (与正常的 FULL 实现相反)。一个精简版 实施不收集候选人;它只包括主机 任何媒体流的候选人。 Lite 代理不生成 连接检查或运行状态机,尽管它们需要 能够响应连接检查。当一个精简的实现 连接到一个完整的实现,完整的代理扮演的角色 控制代理,而精简代理承担受控代理 角色。当两个 lite 实现连接时,不会发送任何检查。

    有关何时适合 lite 实施的指导,请参阅 附录 A 中的讨论。

    需要注意的是,lite 实现已添加到 本规范提供了一个全面的垫脚石 执行。即使对于始终连接到 公共互联网,如果可以实现,最好是完整实施。

    ICE-lite 是您可以在服务器上运行的东西。如果您的服务器使用 ICE-lite,您可以在没有 STUN 的情况下逃脱,并且您可以将服务器配置为发送可访问的地址。

    我认为 Android 没有 ICE-lite 实现。预计 Android 设备的地址会不断变化,而且 Android 已经拥有完整的 ICE,因此为 Android 提供 ICE-lite 似乎没什么意义。

    【讨论】:

    • mattm,您是否见过/使用过位于您配置公共 IP 的 NAT 后面的 ICE-lite 实现,并且工作正常?我想这是给猫剥皮的一种方法。我与许多以这种方式工作的 Sip 客户端合作过(没有 ICE-lite 或根本没有),但必须为公共 IP 配置客户端总是很痛苦。我想这就是全 ICE 与 ICE-lite 的重点,让大家免于这些繁琐且容易出错的手动设置配置。
    【解决方案3】:

    啊抱歉,我搞砸了积极的提名和 ICE 的 ICE-Lite。以下答案适用于 ICE 激进的提名程序。只需将这些视为附加信息。积极提名是一个程序,它定义调用者应如何通过发送 USE-CANDIDATE 来最终确定选定的候选人。

    此帖的正确答案: 在 ICE lite 程序中,客户端不会收集所有候选者,而只会收集本地主机候选者。这基本上是为公共 IP 地址后面的端点设计的,当客户端位于没有 NAT 的公共 IP 后面时,即使该另一端位于对称 NAT 后面,它也可以与任何其他候选者连接。 ICE-Lite 不需要 STUN/TURN 服务器。您无法使用 SDP 线来实现这一点,因为 ICE-Lite 程序在您获得候选人之前首先出现。因此,如果您不设置 STUN/TURN 服务器,那么它将像现在一样作为 ICE-Lite 工作(尽管它不是拥有 ICE-lite 的正式方式,ICE 客户端应该有定义的方式来设置 ICE-Full 或 ICE-Lite)它只会收集主持人候选人。但是,如果您的端点位于某个 NAT 之后,而另一个端点不在网络之外,那么它将无法工作。如果您能确定客户端是否在公共 IP 后面,那就更好了。

    【讨论】:

    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2016-09-12
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多