我建立在Chrome 23的WebRTC连接要连接你需要允许浏览器使用摄像头和麦克风的本地流。 在发送方,我检查,如果可以得到本地流,我不会发出录用通知等,直到这一刻。 然后提议被发送,浏览器立即开始发送ICE候选人。
那么,如果没有得到当地媒体流远程浏览器还没有我得到SYNTAX_ERR: DOM Exception 12
上peerConnection.addIceCandidate(candidate)
,每ICE候选人获得。
我查了一下资料上addIceCandidate
但有关先决条件没有资料。
我想我可以延迟通过延迟,并等待远程客户端添加本地流信号从发送要约ICE候选人,但这是额外的通信需要和不看的权利。
我可以采用某种远程ICE候选人添加到webkitRTCPeerConnection
答案被发送和当地媒体流连接之前?
之后,我写了这个问题的答案我脑子里浮现......有没有必要接受ICE候选人之前,需要连接本地流,但remoteDescription
应设置(应在收到报价的瞬间完成)。 在我的代码我等待着,设置remoteDescription
和发送答案,直到浏览器获取本地流。
从Episodex该解决方案帮助了我。
首先setRemoteDescription,然后创建自己的数据流,然后创建并发送答案。
// On read message
if (msg.sdp.type === 'offer') {
this.peerConnection.setRemoteDescription(new RTCSessionDescription(msg.sdp))
.then(() => navigator.mediaDevices.getUserMedia({audio: true, video: true}))
.then(stream => this.peerConnection.addStream(stream));
.then(() => this.peerConnection.createAnswer())
.then(answer => this.peerConnection.setLocalDescription(answer))
.then(() => this.sendMessage({sdp: this.peerConnection.localDescription}))
}