Signatur
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
"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);
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-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
componentzuweist, passiert nichts (im Strict Mode gibt es einenTypeError). Der Wert kommt ausschließlich aus dem Kandidaten-String. - Kann
nullsein: Das passiert, wenn der Kandidat nur mitsdpMidoder einem leeren bzw. ungültigencandidate-String erzeugt wurde. Prüfe den Wert also, bevor du dich darauf verlässt. - RTCP-Multiplexing: Moderne Browser setzen
rtcpMuxPolicyfest 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ändigencandidate-String und liescomponentauf 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).