首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebRTC,如何在没有冰滴的情况下收集全套候选人?

WebRTC,如何在没有冰滴的情况下收集全套候选人?
EN

Stack Overflow用户
提问于 2019-05-11 06:56:53
回答 1查看 621关注 0票数 0

我正在尝试在两台pc之间进行视频通话,我不想使用冰滴,有时我可以进行视频通话,其他时候(我不知道为什么)我无法收集所有的冰候选人,iceGatheringState停留在聚集状态,永远不会完成。

我已经尝试使用事件onicecandidate并等待null候选。现在我使用的是onIceGatheringStateChange。

代码语言:javascript
复制
pc=new RTCPeerConnection(iceServers);
pc.onicegatheringstatechange=function(){
  if(pc.iceGatheringState=='complete'){
    send_to_target(pc.localDescription);
  }
}   
localStream.getTracks().forEach(track=>pc.addTrack(track,localStream));
pc.createOffer().then(function(sessionDescription){
  pc.setLocalDescription(sessionDescription);
})

我正在用chrome在两台笔记本电脑上测试这一点,我希望iceGatheringState进入完成状态,或者知道另一种方法/条件来收集冰候选,以便在不使用冰滴流的情况下将sessionDescription发送到目标。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-08-16 03:15:34

据我所知,有两种方法可以确定"ICE候选人聚集“/ "ICE滴流”何时完成。

  1. 您可以通过查看iceGatheringState更改事件并检查iceGatheringState的值是否等于“complete”来确定ICE候选收集是否已完成。

Code example from MDN

代码语言:javascript
复制
let pc = new RTCPeerConnection();
pc.onicegatheringstatechange = ev => {
  let connection = ev.target;

  switch(connection.iceGatheringState) {
    case "gathering":
      /* collection of candidates has begun */
      break;
    case "complete":
      /* collection of candidates is finished */
      break;
  }
}

  1. 您还可以让icecandidate事件的处理程序查看其candidate属性是否等于“null”。

Code example from MDN

代码语言:javascript
复制
let pc = new RTCPeerConnection();
pc.onicecandidate = function(event) {
  if (event.candidate) {
    /* Code for each candidate */
    /* Send the candidate to the remote peer */
  } else {
    /* All ICE candidates have been sent */
  }
}

WebRTC的帮助链接:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56085742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档