Chrome 不生成ice candidate,WebRTC

Chrome does not generate the ice candidate , WebRTC

我正在尝试在 local[= 使用 Chrome 到 Chrome 浏览器在两个对等点之间建立视频通话47=],未使用 STUN/TURN 服务器。

假设第一个同伴的名字是“Sara”,她作为主叫方进行视频通话。 第二个同行的名字是“Bill”,他是观众,只看了 Sara 的视频。

1- Sara 的计算机生成报价并将其设置为使用 pc.setLocalDescription(offer) 的本地描述。

2- 它使用信令服务器将生成的报价发送给 Bill。

3- Bill 的计算机使用 pc.setRemoteDescription(offer).

将来自 Sara 的传入报价设置为远程描述

4- Bill 生成一个答案并将其设置为本地描述。

5- Bill 使用信令服务器将生成的答案发送给 Sara。

6- Sara 得到答案并将其设置为远程描述。

我已经为双方的 ice-candidates 定义了一个事件监听器:

pc.onicecandidate = (event)=>{
   console.log("Event : ",event);
   pc.addIceCandidate(event.candidate);
};

在 Chrome 中它从不调用 pc.onicecandidate,我的意思是 onicecandidate 从不执行和记录,但在 Firefox 中它记录一个事件对象,它的 candidate 属性 等于 null.

有人能告诉我 pc.onicecandidate = (event)=>... 调用的确切时间吗?

当 setLocalDescription() 成功时,onicecandidate 调用。

在onicecandidate中,事件参数会有自己的候选。

所以你必须将 Sara 的候选人发送给 Bill,反之亦然。

如果 Sara 或 Bill 收到对手的候选人,则该候选人必须添加到 pc。

const pc = new RTCPeerConnection();

pc.onicecandidate = evt => {
    // send evt.candidate to opponent
    // you don't need to add own candidate self.
};

...

pc.createOffer().then(sdp => {
    pc.setLocalDescription(sdp); // onicecandidate invokes !
    // send sdp to opponent.
}).catch(err => console.error(err));