RTCPeerConnection: canTrickleIceCandidates-Eigenschaft

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2022.

Die canTrickleIceCandidates schreibgeschützte Eigenschaft der RTCPeerConnection-Schnittstelle gibt einen booleschen Wert zurück, der angibt, ob der Remote-Peer trickled ICE candidates akzeptieren kann oder nicht.

ICE-Trickling ist der Prozess, bei dem weiterhin Kandidaten gesendet werden, nachdem das initiale Angebot oder die Antwort bereits an den anderen Peer gesendet wurde.

Diese Eigenschaft wird erst gesetzt, nachdem RTCPeerConnection.setRemoteDescription() aufgerufen wurde. Idealerweise bietet Ihr Signalisierungsprotokoll eine Möglichkeit, die Unterstützung von Trickling zu erkennen, sodass Sie nicht auf diese Eigenschaft angewiesen sind. Ein WebRTC-Browser unterstützt immer Trickle ICE. Wenn Trickling nicht unterstützt wird oder Sie es nicht erkennen können, können Sie auf einen falsy-Wert für diese Eigenschaft prüfen und dann warten, bis sich der Wert von iceGatheringState auf "completed" ändert, bevor Sie das initiale Angebot erstellen und senden. Auf diese Weise enthält das Angebot alle Kandidaten.

Wert

Ein boolescher Wert, der true ist, wenn der Remote-Peer trickled ICE candidates akzeptieren kann, und false, wenn er es nicht kann. Wenn kein Remote-Peer festgelegt wurde, ist dieser Wert null.

Hinweis: Der Wert dieser Eigenschaft wird bestimmt, sobald der lokale Peer RTCPeerConnection.setRemoteDescription() aufgerufen hat; die bereitgestellte Beschreibung wird vom ICE-Agenten verwendet, um zu bestimmen, ob der Remote-Peer trickled ICE candidates unterstützt.

Beispiele

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

Spezifikationen

Specification
WebRTC: Real-Time Communication in Browsers
# dom-rtcpeerconnection-cantrickleicecandidates

Browser-Kompatibilität

Siehe auch