Signatur
Beschreibung
Die Eigenschaft id eines RTCRemoteInboundRtpStreamStats-Objekts ist ein String, der dieses Statistikobjekt eindeutig identifiziert. Solche Objekte beschreiben, wie die Gegenseite einen von uns gesendeten RTP-Strom empfängt. Die Daten stammen aus RTCP-Receiver-Reports, z. B. Paketverlust, Jitter und Round-Trip-Time.
Innerhalb eines RTCStatsReport, also der Map, die RTCPeerConnection.getStats() liefert, ist die id gleichzeitig der Schlüssel des Eintrags. Andere Statistikobjekte verweisen über diesen Wert auf das Objekt. Das zugehörige outbound-rtp-Objekt hat zum Beispiel ein Feld remoteId, das auf die id des passenden remote-inbound-rtp-Eintrags zeigt. Umgekehrt verweist localId auf den lokalen Sendestrom.
Das Format des Strings legt der Browser fest und kann sich ändern. Wichtig ist nur: Für dasselbe überwachte Objekt bleibt die id über mehrere getStats()-Aufrufe hinweg gleich. So lassen sich aufeinanderfolgende Berichte vergleichen, etwa um Raten oder Differenzen zu berechnen.
Rückgabewert
getStats()-Aufrufe gleichbleibende Kennung dieses Statistikobjekts. Der Inhalt hat kein festgelegtes Format und hängt vom Browser ab.Beispiele
Alle remote-inbound-rtp-Einträge mit ID ausgeben
const pc = new RTCPeerConnection();
// ... Verbindung aufbauen, Tracks hinzufügen ...
const logRemoteInbound = async () => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type === 'remote-inbound-rtp') {
console.log(`ID: ${stats.id}, kind: ${stats.kind}, RTT: ${stats.roundTripTime}`);
}
});
};
setInterval(logRemoteInbound, 2000);
Vom outbound-rtp über remoteId zum remote-inbound-rtp-Eintrag
const findRemoteInbound = async (pc) => {
const report = await pc.getStats();
for (const stats of report.values()) {
if (stats.type === 'outbound-rtp' && stats.remoteId) {
// Die id dient als Schlüssel im RTCStatsReport
const remote = report.get(stats.remoteId);
console.log(`${stats.id} -> ${remote.id}, verloren: ${remote.packetsLost}`);
}
}
};
Paketverlust zwischen zwei Messungen anhand der ID berechnen
const previous = new Map();
const measureLoss = async (pc) => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type !== 'remote-inbound-rtp') return;
const prev = previous.get(stats.id);
if (prev) {
const delta = stats.packetsLost - prev.packetsLost;
console.log(`${stats.id}: ${delta} neue verlorene Pakete`);
}
previous.set(stats.id, stats);
});
};
setInterval(() => measureLoss(pc), 1000);
// Wichtig · Fallstricke
- Das Format der
idist nicht standardisiert. Werte wie"RI01V1234"(Chrome) oder zufällige Strings (Firefox) dürfen nicht zerlegt werden. Verwende dieidnur als undurchsichtigen Schlüssel. remote-inbound-rtp-Einträge gibt es erst, wenn der erste RTCP-Receiver-Report der Gegenseite angekommen ist. Direkt nach dem Verbindungsaufbau fehlen sie daher oft.- Die
idist nur innerhalb einerRTCPeerConnectioneindeutig. Wenn du mehrere Verbindungen überwachst, kombiniere sie mit einer eigenen Kennung für die Verbindung. - Ältere Browser liefern diesen Statistiktyp nicht oder nur teilweise. Firefox und Safari unterstützen ihn erst in neueren Versionen. Prüfe deshalb immer auf
stats.type === 'remote-inbound-rtp'.