当我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。
感谢您的帮助。
答案 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会准确地告诉您。