Signatur
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
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}`);
}
});
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);
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);
}
// 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.idbzw.dataChannelIdentifier: Diese sind Zahlen (SCTP-Stream-ID),idhingegen 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.