Start · Sprachen · JavaScript · Referenz · RTCIceCandidate.component

RTCIceCandidate.component

Eigenschaft

Schreibgeschützter String, der angibt, ob ein ICE-Kandidat zur RTP-Komponente (<code>"rtp"</code>) oder zur RTCP-Komponente (<code>"rtcp"</code>) gehört.

seit JavaScript Chrome 74+, Safari 11+, Edge 79+; Firefox erst in Kategorie: webapi

Signatur

RTCIceCandidate.component

Beschreibung

Die Eigenschaft component eines RTCIceCandidate gibt an, für welche Komponente des Medientransports der Kandidat gilt. Mögliche Werte sind "rtp" für den eigentlichen Medienstrom (Audio/Video/Daten) und "rtcp" für den Steuerkanal (RTP Control Protocol), über den z. B. Empfangsberichte und Paketverlust-Statistiken laufen.

Der Wert wird aus dem Feld component-id der SDP-Zeile candidate: abgeleitet: 1 entspricht "rtp", 2 entspricht "rtcp". Lässt sich der Kandidaten-String nicht auswerten, ist der Wert null.

In der Praxis sieht man fast nur noch "rtp"-Kandidaten, weil moderne Browser RTCP-Multiplexing (rtcpMuxPolicy: "require") standardmäßig erzwingen. Dabei laufen RTP und RTCP über denselben Port, und separate RTCP-Kandidaten fallen weg. Nützlich ist die Eigenschaft vor allem zur Fehlersuche, zum Protokollieren und zum Filtern von Kandidaten bei der Anbindung an ältere Gegenstellen ohne RTCP-Multiplexing.

Rückgabewert

Typ
"rtp" | "rtcp" | null
Beschreibung
"rtp" für einen Kandidaten der RTP-Komponente (component-id 1), "rtcp" für einen der RTCP-Komponente (component-id 2) oder null, wenn sich der Wert nicht ermitteln lässt.

Beispiele

Komponente lokaler Kandidaten protokollieren

const pc = new RTCPeerConnection({
  iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]
});

pc.addEventListener('icecandidate', ({ candidate }) => {
  if (!candidate) {
    console.log('ICE-Sammlung abgeschlossen');
    return;
  }
  console.log(`${candidate.component} | ${candidate.type} | ${candidate.protocol} ${candidate.address}:${candidate.port}`);
});

pc.createDataChannel('test');
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
rtp | host | udp 192.168.1.23:54321 rtp | srflx | udp 203.0.113.7:54321 ICE-Sammlung abgeschlossen

Kandidat aus einem Signalisierungs-String erzeugen

const cand = new RTCIceCandidate({
  candidate: 'candidate:842163049 2 udp 1677729535 203.0.113.7 50001 typ srflx raddr 192.168.1.23 rport 50001',
  sdpMid: '0',
  sdpMLineIndex: 0
});

// component-id 2 im String => "rtcp"
console.log(cand.component);
console.log(cand.type, cand.port);
rtcp srflx 50001

RTCP-Kandidaten vor dem Versand herausfiltern

const pc = new RTCPeerConnection({ rtcpMuxPolicy: 'require' });
const signaling = new BroadcastChannel('signaling');

pc.onicecandidate = ({ candidate }) => {
  if (!candidate) return;
  // Bei RTCP-Multiplexing sind separate RTCP-Kandidaten überflüssig
  if (candidate.component === 'rtcp') {
    console.warn('RTCP-Kandidat verworfen:', candidate.address);
    return;
  }
  signaling.postMessage(candidate.toJSON());
};

// Wichtig · Fallstricke

  • Schreibgeschützt: Wenn du component zuweist, passiert nichts (im Strict Mode gibt es einen TypeError). Der Wert kommt ausschließlich aus dem Kandidaten-String.
  • Kann null sein: Das passiert, wenn der Kandidat nur mit sdpMid oder einem leeren bzw. ungültigen candidate-String erzeugt wurde. Prüfe den Wert also, bevor du dich darauf verlässt.
  • RTCP-Multiplexing: Moderne Browser setzen rtcpMuxPolicy fest auf "require". "rtcp"-Kandidaten sieht man darum normalerweise nur bei Kandidaten von fremden oder älteren Gegenstellen.
  • Nicht über die Signalisierung schicken: Die Eigenschaft wird von toJSON() nicht mitgeliefert. Übertrage immer den vollständigen candidate-String und lies component auf der Empfängerseite erneut aus.
  • Kompatibilität: Chromium-Browser und Safari unterstützen die Eigenschaft seit Längerem. Firefox hat die zerlegten Kandidaten-Eigenschaften erst später bekommen. In älteren Versionen musst du das zweite Feld des candidate-Strings selbst auslesen (1 = RTP, 2 = RTCP).