PeerConnection无法创建答案

时间:2018-06-29 10:29:34

标签: javascript webrtc

当我catch时,我在myPeerConnection.createAnswer()块中收到此错误

  

PeerConnection不能在非状态下创建答案   有远程优惠或具有本地优惠。

我正在使用 socket.io 作为信令服务器。我正在关注MDN

中的教程

这是我的代码:

myPeerConnection.setRemoteDescription(desc).then(() => {
    return navigator.mediaDevices.getUserMedia(mediaConstraints);
  }).then((stream) => {
    localStream = stream;
    document.getElementById("localVideo").srcObject = localStream;
    return myPeerConnection.addStream(localStream);
  }).then(() => {
    return myPeerConnection.createAnswer(); //No error when removed this then chain
  }).then((answer) => {
    return myPeerConnection.setLocalDescription(answer); // No error when removed this then chain
  }).then(() => {
    socket.emit('video-answer', {
      sdp: myPeerConnection.localDescription
    });
  }).catch(handleGetUserMediaError);

The answer here也没有帮助我。

我已将整个项目上传到Github。您可以查看脚本文件here

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

这是我一年半前提交的bug in Chrome的长期证明。

您正在onclick处理程序和handleVideoOfferMsg中创建对等连接,并带有一个调用onnegotiationneeded的{​​{1}}处理程序。没关系,直接进入spec example

createOffer中,您继续呼叫handleVideoOfferMsg,使对等连接进入setRemoteDescription(desc)状态,然后向其添加曲目以供回答。

Chrome中的错误是spec 说仅将negotiationneeded标志设置为have-remote-offer状态时,添加这些轨道会触发negotiationneeded事件。

在Firefox中尝试。它应该在那里工作。

您可以在Chrome中解决此问题,如下所示:

"stable"

答案 1 :(得分:0)

比喻地讲,您正在尝试回答问题而不被问到问题。这没有道理-对等连接API会准确地告诉您。