我得到这个错误在我的catch块,当我做myPeerConnection.createAnswer()
PeerConnection不能在具有have-remote-off或have-local-pranswer之外的状态下创建答案。
我正在使用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);
Run Code Online (Sandbox Code Playgroud)
这里的答案也没有帮助我。
我已将整个项目上传到Github。您可以在此处查看脚本文件。
任何帮助表示赞赏。
这是我一年半之前提交的Chrome浏览器中的一个长期错误。
您将在onclick处理程序和中创建对等连接,并handleVideoOfferMsg完成一个onnegotiationneeded调用的处理程序createOffer。没关系,这完全符合规范示例。
在handleVideoOfferMsg您继续进行呼叫时setRemoteDescription(desc),使该对等连接进入have-remote-offer状态,然后在其中添加音轨以获取答案。
Chrome中的错误是negotiationneeded,当规范
说只能将negotiationneeded标志设置为"stable"状态时,添加这些轨道会触发事件。
在Firefox中尝试。它应该在那里工作。
您可以在Chrome中解决此问题,如下所示:
pc.onnegotiationneeded = e => {
if (pc.signalingState != "stable") return;
..
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1815 次 |
| 最近记录: |