Signatur
Beschreibung
Die schreibgeschützte Eigenschaft id des Wörterbuchs RTCPeerConnectionStats enthält einen String, der das Objekt eindeutig bezeichnet, zu dem die Statistik gehört. Bei RTCPeerConnectionStats ist das die RTCPeerConnection selbst. Den Eintrag erkennt man an type === "peer-connection". Er enthält Kennzahlen wie dataChannelsOpened und dataChannelsClosed.
Die id ist zugleich der Schlüssel, unter dem der Eintrag in der Map-artigen Struktur RTCStatsReport gespeichert ist. Mit report.get(id) lässt sich der Eintrag also direkt abrufen. Die ID gilt für die gesamte Lebensdauer der Verbindung: Ruft man getStats() mehrmals auf, trägt dasselbe Objekt jedes Mal dieselbe id. So lassen sich Messwerte über die Zeit vergleichen, etwa um Differenzen oder Raten zu berechnen.
Der Inhalt des Strings ist nicht festgelegt und je nach Browser unterschiedlich, zum Beispiel "P" in Chromium oder eine UUID-artige Zeichenkette in Firefox. Behandeln Sie die ID deshalb als undurchsichtigen Bezeichner: Speichern und vergleichen Sie sie, aber lesen Sie keine Bedeutung aus ihrem Inhalt heraus.
Rückgabewert
getStats()-Aufrufe hinweg gleichbleibende Kennung des Statistikobjekts, das die RTCPeerConnection beschreibt.Beispiele
ID des peer-connection-Eintrags ermitteln
const pc = new RTCPeerConnection();
pc.createDataChannel('chat');
const report = await pc.getStats();
for (const stats of report.values()) {
if (stats.type === 'peer-connection') {
console.log('ID:', stats.id);
console.log('Geöffnete Kanäle:', stats.dataChannelsOpened);
}
}
Eintrag über die ID direkt aus dem Bericht holen
const getPcStats = async (pc) => {
const report = await pc.getStats();
const entry = [...report.values()].find((s) => s.type === 'peer-connection');
// Die id ist gleichzeitig der Map-Schlüssel
return report.get(entry.id);
};
const pc = new RTCPeerConnection();
const stats = await getPcStats(pc);
console.log(stats.type, stats.timestamp > 0);
Messwerte über die Zeit anhand der ID vergleichen
const pc = new RTCPeerConnection();
let previous = new Map();
const poll = async () => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type !== 'peer-connection') return;
const old = previous.get(stats.id);
if (old) {
const delta = stats.dataChannelsOpened - old.dataChannelsOpened;
console.log(`[${stats.id}] neue Kanäle seit letzter Messung: ${delta}`);
}
previous.set(stats.id, stats);
});
};
const timer = setInterval(poll, 2000);
// später: clearInterval(timer); pc.close();
// Wichtig · Fallstricke
- Undurchsichtiger Wert: Aufbau und Länge der ID sind browserabhängig. Parsen Sie die ID nicht und erwarten Sie kein bestimmtes Format.
- Nur innerhalb einer Verbindung eindeutig: Zwei verschiedene
RTCPeerConnection-Instanzen können dieselbe ID liefern, etwa"P"in Chromium. Wer mehrere Verbindungen überwacht, sollte die Instanz zusätzlich als Schlüssel verwenden, zum Beispiel über eineWeakMap. - Nur lesbar: Statistikobjekte sind Momentaufnahmen. Änderungen an
idhaben keine Wirkung auf die Verbindung. - Kompatibilität:
getStats()mit Promise-Rückgabe undRTCStatsReportwird von allen aktuellen Browsern unterstützt. Welche Felder einpeer-connection-Eintrag zusätzlich enthält, ist je nach Browser unterschiedlich. Ältere, Callback-basiertegetStats()-Varianten sind veraltet. - Datenschutz: Statistiken können Rückschlüsse auf Netzwerk und Gerät zulassen. Übertragen Sie sie nur mit Bedacht an Telemetrie-Server.