我试图在两个对等体之间使用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)=>...
调用?
当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));