Chrome浏览器不生成冰的候选者,WebRTC

问题描述 投票:0回答:1

我试图在两个对等体之间使用Chrome浏览器建立视频通话,在 本地,不使用 STUNTURN 服务器。

想象一下,第一个对等体的名字是"萨拉",她以通话者的身份呈现在视频通话中.第二个同行的名字是" "。比尔",他是一个观众,只看Sara的视频。

1- Sara的电脑生成一个报价,并将其设置为本地描述,用 pc.setLocalDescription(offer).

2- 它使用信令服务器向比尔发送一个生成的报价。

3- Bill的计算机将传入的Sara的报价设置为远程描述,使用的是 pc.setRemoteDescription(offer).

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

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

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

我已经为两边的冰候选人定义了一个事件监听器。

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

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

谁能告诉我,到底什么时候 pc.onicecandidate = (event)=>... 调用?

javascript node.js express webrtc p2p
1个回答
0
投票

当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));

© www.soinside.com 2019 - 2024. All rights reserved.