首页 > 解决方案 > WebRTC 视频流错误 - scaledrone

问题描述

有谁知道过去一两个月 WebRTC 发生了什么变化?我有一个 WebRTC 视频网络应用程序,大约两个月前运行良好,现在随机停止工作。我使用 scaledrone 进行选拔

这是我遵循的教程: https ://www.scaledrone.com/blog/posts/webrtc-tutorial-simple-video-chat

我得到的唯一错误是这个并没有对我说什么:

DOMException: Failed to set local answer sdp: Called in wrong state: kStable

演示可以在这里看到:在此处 输入链接描述

任何想法将不胜感激!

标签: webrtc

解决方案


它是 RTCPeerConnection.signalingState。可能的值是:

  • stable - 初始状态。没有正在进行的 SDP 提议/答案交换
  • have-local-offer - 连接的本地端已在本地应用 SDP 报价
  • have-remote-offer - 连接的远程端已在本地应用 SDP 报价
  • have-local-pranswer - 已应用远程 SDP 报价,并且已在本地应用 SDP pranswer
  • have-remote-pranswer - 已应用本地 SDP,并且已远程应用 SDP pranswer
  • 关闭 - 连接关闭

您可以在下面添加的图片中看到 WebRTC 协商过程。 在此处输入图像描述

DOMException:无法设置本地答案 sdp:在错误状态下调用:kStable表示“您的浏览器”没有获得任何 SDP 提议/答案,如上图所示。这可能取决于浏览器与 scaledron WebRTC-Wrapper 实现的不兼容,或者例如某些 STUN 问题,这些问题也涉及 Scaledron 实现。

据报道,第一次使用“新”频道 ID 时,它只工作一次,之后就不再用于请求身份。

我们假设在身份断言请求过程中,经过身份验证的身份(目标对等身份值)有一个“计数”(操作队列),这是非常不稳定的 - 请参阅 - https://www.w3.org/TR/webrtc/# dom-rtcconfiguration-peeridentity

function startWebRTC(isOfferer) 
{
  pc = new RTCPeerConnection(configuration);
    var identity = pc.peerIdentity;
    ...
    ...
    if (identity) 
    {
          alert("Identity of the peer: idp='" 
                 + identity.idp + "'; assertion='" 
                 + identity.name + "'");
    }
    else 
    {
          alert("Identity of the peer has not been verified");
    }
    ...
    ...
}

其中“配置”是:

const configuration = {
  iceServers: [{
    urls: 'stun:stun.l.google.com:19302'
  }]
};

调试器

https://www.w3.org/TR/webrtc/ 4.4.1.2 入队一个操作:“...一个 RTCPeerConnection 对象有一个操作队列,[[Operations]],它确保队列中只有一个异步操作是并发执行。如果在先前调用的返回承诺仍未解决时进行后续调用,则它们将被添加到队列中并在所有先前调用已完成执行并且它们的承诺已解决时执行......“......见接下来的步骤...

但是如果没有直接的分析工具,评估它是极其困难的。WebRTC的 scaledrone 包装器实现非常敏感

我们必须检查 RTCPeerConnection.iceConnectionState, RTCPeerConnection.peerIdentity, RTCPeerConnection.localDescription, RTCPeerConnection.remoteDescription, RTCPeerConnection.signalingState, ...。

我用 Firefox-Quantum-65.0 x64 和 Chrome-71.0 对 nodejs websockets 做了一些比较测试,你可以在这里看到: 火狐 在此处输入图像描述

你会发现它有很大的不同。最佳阿克塞尔


推荐阅读