RTCPeerConnection: canTrickleIceCandidates 属性

canTrickleIceCandidatesRTCPeerConnection 接口的一个只读属性,它返回一个布尔值,指示远程对等体是否可以接受 trickled ICE 候选

ICE trickling 是在初始 Offer 或 Answer 已经发送到另一个对等体之后,继续发送候选的过程。

此属性仅在调用 RTCPeerConnection.setRemoteDescription() 后设置。理想情况下,您的信令协议提供了一种检测 trickling 支持的方法,这样您就不需要依赖此属性。WebRTC 浏览器始终支持 trickle ICE。如果 trickling 不受支持,或者您无法确定,您可以检查此属性的虚假值,然后等到 iceGatheringState 的值更改为 "completed" 后再创建和发送初始 Offer。这样,Offer 就包含所有候选。

如果远程对等体可以接受 trickled ICE 候选,则为 true;如果不能,则为 false。如果没有建立远程对等体,则此值为 null

注意:此属性的值是在本地对等体调用 RTCPeerConnection.setRemoteDescription() 后确定的;提供的描述由 ICE 代理用于确定远程对等体是否支持 trickled ICE 候选。

示例

js
const pc = new RTCPeerConnection();

function waitToCompleteIceGathering(pc) {
  return new Promise((resolve) => {
    pc.addEventListener(
      "icegatheringstatechange",
      (e) =>
        e.target.iceGatheringState === "complete" &&
        resolve(pc.localDescription),
    );
  });
}

// The following code might be used to handle an offer from a peer when
// it isn't known whether it supports trickle ICE.
async function newPeer(remoteOffer) {
  await pc.setRemoteDescription(remoteOffer);
  const offer = await pc.createOffer();
  await pc.setLocalDescription(offer);
  if (pc.canTrickleIceCandidates) return pc.localDescription;
  const answer = await waitToCompleteIceGathering(pc);
  sendAnswerToPeer(answer); //To peer via signaling channel
}
// Handle error with try/catch

pc.addEventListener(
  "icecandidate",
  (e) => pc.canTrickleIceCandidates && sendCandidateToPeer(e.candidate),
);

规范

规范
WebRTC:浏览器中的实时通信
# dom-rtcpeerconnection-cantrickleicecandidates

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参阅