10

我正在 Chrome 23 上建立 WebRTC 连接。要附加本地流,您需要允许浏览器使用摄像头和麦克风。在呼叫方方面,我正在检查是否可以获得本地流,并且直到此刻我才发送报价。然后发送报价,浏览器立即开始发送 ICE 候选人。

然后,如果远程浏览器还没有获得本地媒体流,我会为收到SYNTAX_ERR: DOM Exception 12peerConnection.addIceCandidate(candidate)每个 ICE 候选人继续。

我检查了文档addIceCandidate但没有关于先决条件的信息。

我想我可以通过延迟它并等待远程客户端添加本地流的信号来延迟从提供者发送 ICE 候选人,但这是需要额外的通信并且看起来不正确。

我可以webkitRTCPeerConnection在发送答案并附加本地媒体流之前以某种方式添加远程 ICE 候选者吗?

4

2 回答 2

15

在我写完这个问题后,我想到了一个答案......在接收 ICE 候选人之前不需要附加本地流,但remoteDescription应该设置(应该在收到报价时完成)。在我的代码中,我等待设置remoteDescription和发送答案,直到浏览器获取本地流。

于 2012-11-15T10:56:40.473 回答
3

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}))

  } 
于 2019-02-28T18:11:58.953 回答