Signatur
Beschreibung
Die Eigenschaft component eines RTCIceTransport-Objekts gibt die ICE-Komponente an, für die dieser Transport zuständig ist. Laut ICE-Spezifikation (RFC 8445) kann ein Medienstrom aus mehreren Komponenten bestehen. Bei WebRTC sind das RTP (Mediendaten) und RTCP (Steuer- und Statistikpakete).
Die Eigenschaft liefert einen von zwei Zeichenketten-Werten aus der Aufzählung RTCIceComponent:
"rtp": Der Transport überträgt RTP-Daten, bei aktivem RTCP-Multiplexing zusätzlich auch RTCP. Das entspricht der ICE-Komponenten-ID 1."rtcp": Der Transport überträgt ausschließlich RTCP. Das entspricht der ICE-Komponenten-ID 2.
In der Praxis greift man über RTCDtlsTransport.iceTransport auf das RTCIceTransport-Objekt zu. Das RTCDtlsTransport-Objekt erreicht man wiederum über RTCRtpSender.transport, RTCRtpReceiver.transport oder RTCSctpTransport.transport. Die Eigenschaft ist vor allem für Diagnose und Debugging nützlich, etwa um zu prüfen, ob RTCP gemultiplext wird.
Rückgabewert
RTCIceComponent-String: "rtp" für die RTP-Komponente (inklusive gemultiplextem RTCP) oder "rtcp" für eine separate RTCP-Komponente.Beispiele
Komponente des ICE-Transports eines Senders auslesen
const pc = new RTCPeerConnection();
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
stream.getTracks().forEach((track) => pc.addTrack(track, stream));
// Nach der Signalisierung (setLocalDescription/setRemoteDescription)
pc.addEventListener('connectionstatechange', () => {
if (pc.connectionState !== 'connected') return;
const [sender] = pc.getSenders();
const iceTransport = sender.transport?.iceTransport;
console.log('ICE-Komponente:', iceTransport?.component);
});
Alle Transporte einer Verbindung auf RTCP-Multiplexing prüfen
const checkRtcpMux = (pc) => {
const transports = new Set();
for (const t of pc.getTransceivers()) {
const ice = t.sender.transport?.iceTransport;
if (ice) transports.add(ice);
}
for (const ice of transports) {
const muxed = ice.component === 'rtp';
console.log(`Rolle: ${ice.role}, Komponente: ${ice.component}, RTCP gemultiplext: ${muxed}`);
}
};
// z. B. nach erfolgreichem Verbindungsaufbau aufrufen
checkRtcpMux(pc);
Defensiver Zugriff mit Feature-Erkennung
const getIceComponent = (sender) => {
if (!('RTCIceTransport' in window)) {
return 'RTCIceTransport wird nicht unterstützt';
}
const ice = sender?.transport?.iceTransport;
return ice?.component ?? 'Transport noch nicht verfügbar';
};
const pc = new RTCPeerConnection();
const transceiver = pc.addTransceiver('video');
// Vor setLocalDescription ist transport noch null
console.log(getIceComponent(transceiver.sender));
// Wichtig · Fallstricke
- Praktisch immer
"rtp": Die StandardeinstellungrtcpMuxPolicy: "require"inRTCPeerConnectionerzwingt RTCP-Multiplexing über denselben Transport. Aktuelle Browser unterstützen die frühere Option"negotiate"nicht mehr. Der Wert"rtcp"kommt deshalb in der Praxis kaum noch vor. transportkannnullsein:RTCRtpSender.transportbzw.RTCRtpReceiver.transportist erst nachsetLocalDescription()bzw.setRemoteDescription()gesetzt. Deshalb optionale Verkettung (?.) verwenden.- Schreibgeschützt: Eine Zuweisung an
componentwird ignoriert (im Strict Mode gibt es einenTypeError). - Browser-Kompatibilität:
RTCIceTransportist in Chromium-basierten Browsern und Safari verfügbar. In Firefox ist die Unterstützung erst spät bzw. unvollständig hinzugekommen. Vor der Nutzung per Feature-Erkennung prüfen. - Nicht verwechseln mit
RTCIceCandidate.component: Diese Eigenschaft beschreibt die Komponente eines einzelnen ICE-Kandidaten, nicht die des Transports.