【问题标题】:Stun/Turn usage in WebRTC在 WebRTC 中使用 Stun/Turn
【发布时间】:2015-10-30 08:52:30
【问题描述】:

我正在用 C 语言开发一个小型 webrtc 应用程序。我正在使用 sip 信令进行 webrtc 调用。我对 stun/turn/ice 的使用有以下疑问。

当我开始通话时,我会发送带有要约 (SDP) 的邀请。在 SDP 中,我们需要放置 ICE 候选人。

我有两种可能的情况。为了解释它,我将举一个例子。假设两个端点是 AB。我有一个 sip 代理服务器说 P。另外我有一个转弯服务器(支持眩晕和转弯),说它是T

案例 1
所有实体 ABPT 都在同一个专用网络中。这里需要 STUN 分辨率吗?如果是,那么我需要处理哪些眩晕请求/响应?

案例 2
这里 A 在专用网络中。其他实体BPT在公共网络中。在这种情况下,我希望我们需要进行 STUN/TURN 解析。假设我从 STUN 开始,并获得了主持人和反身候选人。我在一些示例中看到,还使用了 PermissionChannel Bind 请求。如果我只使用 STUN(没有 TURN),在我获得主持人和反思候选人之后,我需要做任何额外的事情吗?

除此之外,是否有任何好的开源可用于 C 中使用 gnutls(无 openssl)的 stun/turn 客户端?

【问题讨论】:

    标签: webrtc sip stun turn ice-protocol


    【解决方案1】:

    案例 1 - 否。本身不是必需的。只是没有简单的方法来检测 INVITE 何时来自与您所在的同一网络。

    案例 2 - 如果您只是使用 STUN,本地主机和自反候选就可以了。 TURN 用于需要中继的场景(对称 NAT 场景)。

    【讨论】:

    • 所以在案例 2 中,最初我将发送 STUN 绑定请求,从响应中我将获得主机候选人和自反候选人。我将继续使用自反候选中存在的 IP/端口来构建 SDP 并继续调用。现在我是否需要在此通话的生命周期内发送更多 STUN 请求。请澄清。
    • 不,你没有。 STUN 仅用于收集您的服务器反身候选人。之后你就不再需要它了。
    • 为了验证,我在私网的两台机器上安装了 sipml5(javascript 中的 sip-webrtc 客户端)。我从公共网络(sip2sip.info)使用的 Sip 服务器。我在两个 sipml5 端点之间进行了通话。我观察到,最初 sipml5 正在向 stun 服务器发送 stun 请求,在调用建立后,我看到 stun 绑定数据包在两个 sipml5 端点之间交换。为什么会这样,这两个 sipml5 端点都在我的网络中,理想情况下它们不应该交换 stun 绑定请求。是因为我正在使用公共 stun 服务器和公共 sip 服务器吗?
    • Sipml5 使用 ICE 协议在两个端点之间建立连接。根据 ICE 协议,两个端点之间的连接检查,称为 ICE 检查请求,是通过 STUN Binding 数据包完成的。这就是你所看到的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    相关资源
    最近更新 更多