RTCPeerConnection: canTrickleIceCandidates Eigenschaft

Die canTrickleIceCandidates schreibgeschützte Eigenschaft der Schnittstelle RTCPeerConnection gibt einen booleschen Wert zurück, der anzeigt, ob der entfernte Peer trickled ICE-Kandidaten akzeptieren kann.

ICE-Trickling ist der Prozess des fortfahrenden Sendens von Kandidaten, nachdem das ursprüngliche Angebot oder die Antwort bereits an den anderen Peer gesendet wurde.

Diese Eigenschaft wird erst gesetzt, nachdem RTCPeerConnection.setRemoteDescription() aufgerufen wurde. Idealerweise bietet Ihr Signalprotokoll eine Möglichkeit, die Unterstützung des 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 feststellen können, können Sie nach einem falsy Wert für diese Eigenschaft suchen und dann warten, bis der Wert von iceGatheringState auf "completed" wechselt, bevor Sie das erste Angebot erstellen und senden. So enthält das Angebot alle Kandidaten.

Wert

Ein boolescher Wert, der true ist, wenn der entfernte Peer trickled ICE-Kandidaten akzeptieren kann, und false, wenn nicht. Wenn kein entfernten 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 festzustellen, ob der entfernte Peer trickled ICE-Kandidaten 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

BCD tables only load in the browser

Siehe auch