Start · Sprachen · JavaScript · Referenz · RTCIceTransport.component

RTCIceTransport.component

Eigenschaft

Schreibgeschützte Eigenschaft, die angibt, ob ein <code>RTCIceTransport</code> RTP- (<code>"rtp"</code>) oder RTCP-Pakete (<code>"rtcp"</code>) transportiert.

seit JavaScript Chromium-Browser und Safari; Firefox mit eingeschr Kategorie: webapi

Signatur

RTCIceTransport.component

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

Typ
"rtp" | "rtcp"
Beschreibung
Ein 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);
});
ICE-Komponente: rtp

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);
Rolle: controlling, Komponente: rtp, RTCP gemultiplext: true

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));
Transport noch nicht verfügbar

// Wichtig · Fallstricke

  • Praktisch immer "rtp": Die Standardeinstellung rtcpMuxPolicy: "require" in RTCPeerConnection erzwingt 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.
  • transport kann null sein: RTCRtpSender.transport bzw. RTCRtpReceiver.transport ist erst nach setLocalDescription() bzw. setRemoteDescription() gesetzt. Deshalb optionale Verkettung (?.) verwenden.
  • Schreibgeschützt: Eine Zuweisung an component wird ignoriert (im Strict Mode gibt es einen TypeError).
  • Browser-Kompatibilität: RTCIceTransport ist 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.