RTCPeerConnection.canTrickleIceCandidates

La propiedad de RTCPeerConnection de solo lectura canTrickleIceCandidates devuelve un valor booleano que indica si el par remoto puede aceptar o no candidatos Trickled ICE.

ICE trickling (establecimiento de conectividad interactiva) es el proceso de continuar enviando candidatos después de que la oferta inicial o la respuesta ya se hayan enviado al otro par.

Esta propiedad solo se establece después de haber llamado a RTCPeerConnection.setRemoteDescription() (en-US). Idealmente, su protocolo de señalización proporciona una forma de detectar el soporte de interactividad, por lo que no necesitara esta propiedad. Un navegador WebRTC siempre admitirá ICE trickling. Si no es compatible, o no puede saberlo, puede buscar un valor falso para esta propiedad y luego esperar hasta que cambie el valor de iceGatheringState (en-US) a "completed" antes de crear y enviar la oferta inicial. De esa forma, la oferta contiene todos los candidatos.

Valor

Un valor booleano que es true si el par remoto puede aceptar candidatos trickled ICE y false si no puede. Si no se ha establecido un par remoto, este valor es null.

Nota: El valor de esta propiedad se determina una vez que el par local ha llamado a RTCPeerConnection.setRemoteDescription() (en-US); el agente ICE utiliza la descripción proporcionada para determinar si el par remoto admite o no candidatos trickled ICE.

Ejemplos

js
const pc = new RTCPeerConnection();

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

// El siguiente código podría usarse para manejar una oferta de un par
// cuando no se sabe si es compatible con 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); //Para mirar a través del canal de señalización
}
// Manejar el error con try/catch

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

Especificaciones

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

Compatibilidad con navegadores

BCD tables only load in the browser

Véase tambień