webRTC - 视频导致互联网通话中断

webRTC - video causes the call top drop over internet

更新 1: 我试过像这样改变视频约束

var mediaConstraints = {
  audio: true,            // We want an audio track
  video: {
    width: { min: 160, ideal: 320, max: 640 },
    height: { min: 120, ideal: 240, max: 480 },
  }
};

它稍微改进了调用。视频仍然挂起,有时会导致通话中断。我认为这意味着问题是网络速度慢而不是 NAT。

我仍在寻找解决方法,以改善速度较慢的通话连接。

原版POST:

我知道关于 SO 的类似问题很少,但就我的搜索而言,我想问的问题还没有被问到。

webRTC 视频通话在我的本地网络中运行良好。但是当我试图通过互联网给我的朋友打电话时,它很糟糕。我和我的朋友在同一个 ISP 上,我们住在距离几英里以内的同一地理区域。所以我假设这个问题不是由某些 NAT 或防火墙引起的,但也许我错了。最初,我们的呼叫连接音频通过,视频仅通过几位,然后在呼叫掉线之前冻结或挂起。如果我们禁用视频,通话会持续更长时间并且通常不会掉线。这可能是网络速度慢的问题,因为我们都在互联网速度大约为 150Kbps 的地区吗?但是 whatsapp 视频通话是如何工作的呢?

我打算在具有多个 ISP 和相同低速的同一区域内使用此应用程序。但是,如果问题不是由于速度而是由于我需要 TURN 服务器的 NAT 等引起的,那么我认为我 100% 的呼叫将通过 TURN,这对我来说非常昂贵。

如果您有任何此类经验,或者认为我可以在这种低网速下改进此呼叫设置,我需要建议。

如果这对我有帮助,我的约束配置是:

var mediaConstraints = {
  audio: true,            // We want an audio track
  video: {
    width: { min: 240, ideal: 720, max: 1080 },
    height: { min: 240, ideal: 720, max: 1080 },
  }
};

谢谢

你做的一件事是使用 Simulcast,它本身就是 webrtc 的一部分。 这将使发件人拥有不同质量的流。然后消费部分会根据网络连接自动选择最佳流。

示例:https://www.w3.org/TR/webrtc/#simulcast-example

我在这里发布答案以防有人遇到这个问题。

原因是当 ICE 状态变为 disconnected 时我正在关闭连接。有时由于网络缓慢或其他问题,ICE 可能会暂时将状态更改为 disconnect。通常,它会在一两秒内自行恢复。正确处理此状态的方法是确定 disconnected 何时是永久的,何时是临时的。在问题 的回答中,我计算了两秒内接收到的字节数。如果字节增加了,我认为 disconnect 否则是永久性的,然后关闭连接。