Start · Sprachen · JavaScript · Referenz · RTCTransportStats.id

RTCTransportStats.id

Eigenschaft

String, der das Transportobjekt eindeutig identifiziert, zu dem dieser <code>RTCTransportStats</code>-Eintrag gehört – stabil über mehrere <code>getStats()</code>-Aufrufe hinweg.

seit JavaScript Baseline: Chrome, Edge, Firefox, Safari (WebRTC-St Kategorie: webapi

Signatur

RTCTransportStats.id

Beschreibung

Die schreibgeschützte Eigenschaft id eines RTCTransportStats-Wörterbuchs enthält einen String, der den zugrunde liegenden Transport (in der Praxis den RTCDtlsTransport samt ICE-Transport) innerhalb eines RTCStatsReport eindeutig kennzeichnet. Sie dient zugleich als Schlüssel des Eintrags in der Map-artigen Struktur des Berichts.

Die ID ist vor allem für Verknüpfungen nützlich: Andere Statistikobjekte verweisen über Felder wie transportId (z. B. in RTCInboundRtpStreamStats, RTCOutboundRtpStreamStats, RTCIceCandidatePairStats) auf genau diesen Wert. Umgekehrt führt selectedCandidatePairId bzw. localCertificateId vom Transport zu weiteren Einträgen.

Da dasselbe Objekt bei wiederholten Aufrufen von RTCPeerConnection.getStats() dieselbe id behält, lassen sich Werte zweier Berichte sicher einander zuordnen – etwa um aus bytesSent-Differenzen und timestamp eine Übertragungsrate zu berechnen.

Der Aufbau des Strings ist nicht standardisiert und browserabhängig (z. B. "T01" in Chrome oder eine UUID-artige Zeichenkette in Firefox). Man sollte ihn deshalb nur als undurchsichtigen Bezeichner behandeln.

Rückgabewert

Typ
string
Beschreibung
Eindeutiger, undurchsichtiger Bezeichner des Transport-Statistikobjekts; identisch mit dem Schlüssel im RTCStatsReport.

Beispiele

Transport-IDs aus einem Statistikbericht auslesen

const pc = new RTCPeerConnection();
pc.createDataChannel('chat');
await pc.setLocalDescription(await pc.createOffer());

const report = await pc.getStats();
report.forEach((stats) => {
  if (stats.type === 'transport') {
    console.log('Transport-ID:', stats.id, '| DTLS-Status:', stats.dtlsState);
  }
});
Transport-ID: T01 | DTLS-Status: new

RTP-Stream seinem Transport zuordnen

const logTransportForStreams = async (pc) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type === 'outbound-rtp') {
      // transportId verweist auf RTCTransportStats.id
      const transport = report.get(stats.transportId);
      console.log(`${stats.kind}-Stream nutzt Transport ${transport?.id}`);
      console.log('Gewähltes Kandidatenpaar:', transport?.selectedCandidatePairId);
    }
  }
};

await logTransportForStreams(pc);
video-Stream nutzt Transport T01 Gewähltes Kandidatenpaar: CPabc123_def456

Senderate über zwei Berichte per id berechnen

const getTransports = async (pc) => {
  const map = new Map();
  (await pc.getStats()).forEach((s) => {
    if (s.type === 'transport') map.set(s.id, s);
  });
  return map;
};

const before = await getTransports(pc);
await new Promise((r) => setTimeout(r, 1000));
const after = await getTransports(pc);

for (const [id, now] of after) {
  const prev = before.get(id);
  if (!prev) continue;
  const seconds = (now.timestamp - prev.timestamp) / 1000;
  const kbps = ((now.bytesSent - prev.bytesSent) * 8) / seconds / 1000;
  console.log(`Transport ${id}: ${kbps.toFixed(1)} kbit/s`);
}
Transport T01: 1450.3 kbit/s

// Wichtig · Fallstricke

  • Das Format der id ist nicht spezifiziert und unterscheidet sich zwischen Browsern – niemals parsen oder Annahmen über Präfixe wie "T" treffen.
  • Die ID ist nur innerhalb derselben RTCPeerConnection eindeutig und stabil. Nach einem ICE-Neustart oder bei neuem Transport kann eine neue ID auftauchen; alte IDs verschwinden aus dem Bericht.
  • Mit bundlePolicy: "max-bundle" (Standard in modernen Browsern) gibt es meist nur einen Transport-Eintrag; ohne Bundling können mehrere Transporte mit eigenen IDs existieren.
  • Einträge vom Typ "transport" erscheinen erst, wenn ein Transport angelegt wurde (nach setLocalDescription()). Firefox lieferte transport-Statistiken lange nicht bzw. nur eingeschränkt – vorher auf Existenz prüfen.
  • Die ID kann Fingerprinting-relevante Rückschlüsse nicht zulassen, sollte aber wie alle Statistikdaten nicht ungefiltert an Dritte übermittelt werden.