Start · Sprachen · JavaScript · Referenz · RTCDataChannelStats.id

RTCDataChannelStats.id

Eigenschaft

Die Eigenschaft <code>id</code> ist eine Zeichenkette, die das Statistikobjekt eines <code>RTCDataChannel</code> innerhalb eines <code>RTCStatsReport</code> eindeutig kennzeichnet.

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

Signatur

RTCDataChannelStats.id

Beschreibung

Die schreibgeschützte Eigenschaft id des Wörterbuchs RTCDataChannelStats enthält eine Zeichenkette, die das überwachte Objekt – hier einen RTCDataChannel – eindeutig identifiziert. Sie dient zugleich als Schlüssel des Eintrags in der Map-ähnlichen Struktur RTCStatsReport, die von RTCPeerConnection.getStats() zurückgegeben wird.

Wichtig: Die ID bleibt für dasselbe überwachte Objekt über mehrere getStats()-Aufrufe hinweg gleich. Deshalb eignet sie sich, um Messwerte wie bytesSent oder messagesReceived über die Zeit zu verfolgen und daraus Raten (z. B. Bytes pro Sekunde) zu berechnen.

Die ID ist ein vom Browser vergebener, undurchsichtiger Wert. Man sollte ihr Format nicht auswerten, sondern sie nur vergleichen oder als Schlüssel verwenden. Sie ist nicht zu verwechseln mit RTCDataChannel.id (numerische SCTP-Stream-ID) bzw. RTCDataChannelStats.dataChannelIdentifier.

Rückgabewert

Typ
string
Beschreibung
Eindeutige, zwischen getStats()-Aufrufen stabile Kennung des Statistikobjekts; entspricht dem Schlüssel im RTCStatsReport.

Beispiele

IDs aller Datenkanal-Statistiken auslesen

const pc = new RTCPeerConnection();
const channel = pc.createDataChannel('chat');

const report = await pc.getStats();
report.forEach((stats) => {
  if (stats.type === 'data-channel') {
    console.log(`ID: ${stats.id}, Label: ${stats.label}, Zustand: ${stats.state}`);
  }
});
ID: D1, Label: chat, Zustand: connecting

Senderate über mehrere Messungen berechnen

const previous = new Map();

const measure = async (pc) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type !== 'data-channel') continue;
    const last = previous.get(stats.id);
    if (last) {
      const seconds = (stats.timestamp - last.timestamp) / 1000;
      const rate = (stats.bytesSent - last.bytesSent) / seconds;
      console.log(`${stats.label} (${stats.id}): ${rate.toFixed(0)} B/s`);
    }
    previous.set(stats.id, stats);
  }
};

// alle 2 Sekunden messen
// setInterval(() => measure(pc), 2000);
chat (D1): 1024 B/s

Eintrag gezielt per ID aus dem Report holen

const report = await pc.getStats();
const dcStats = [...report.values()].find((s) => s.type === 'data-channel');

if (dcStats) {
  // id ist identisch mit dem Map-Schlüssel
  console.log(report.get(dcStats.id) === dcStats);
}
true

// Wichtig · Fallstricke

  • Das Format der ID ist browserabhängig (z. B. "D1" in Chrome, UUID-artig in Firefox) – niemals parsen oder fest im Code hinterlegen.
  • Nicht verwechseln mit RTCDataChannel.id bzw. dataChannelIdentifier: Diese sind Zahlen (SCTP-Stream-ID), id hingegen eine Zeichenkette.
  • Nach dem Schließen des Kanals kann der Statistikeintrag noch eine Zeit lang mit Zustand "closed" im Report erscheinen; die ID bleibt dabei gleich.
  • getStats() ist asynchron und liefert ein Promise – in älteren Browsern existierte eine callback-basierte, nicht standardkonforme Variante.