Signatur
Beschreibung
Die Eigenschaft id eines RTCRemoteOutboundRtpStreamStats-Objekts ist eine Zeichenkette. Sie identifiziert das überwachte Objekt eindeutig, hier also den ausgehenden RTP-Strom auf der Gegenseite, also den Strom, den der entfernte Peer an uns sendet. Die Werte stammen aus RTCP-Sender-Reports (SR) der Gegenseite. Der Eintrag hat den type "remote-outbound-rtp".
Die id ist zugleich der Schlüssel, unter dem das Objekt in der Map-artigen RTCStatsReport-Struktur liegt. Über report.get(id) kommt man also direkt an den Eintrag. Andere Statistikobjekte verweisen über diese ID auf ihn. So enthält das passende RTCInboundRtpStreamStats-Objekt in remoteId die id des zugehörigen remote-outbound-rtp-Eintrags. Umgekehrt zeigt localId des Remote-Eintrags auf den lokalen inbound-rtp-Eintrag.
Wichtig: Dieselbe überwachte Ressource hat in allen Berichten derselben RTCPeerConnection dieselbe ID. Deshalb eignet sich die id, um Messwerte wie packetsSent oder bytesSent über mehrere getStats()-Aufrufe hinweg zu vergleichen und daraus zum Beispiel Bitraten zu berechnen.
Rückgabewert
RTCPeerConnection eindeutige ID. Ihr Format ist nicht festgelegt, z. B. "ROA2615437408" in Chrome.Beispiele
IDs aller remote-outbound-rtp-Einträge auflisten
// pc ist eine verbundene RTCPeerConnection
const listRemoteOutbound = async (pc) => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type === 'remote-outbound-rtp') {
console.log(`${stats.kind}: ${stats.id}`);
}
});
};
await listRemoteOutbound(pc);
Vom inbound-rtp-Eintrag zum Remote-Eintrag navigieren
const report = await pc.getStats();
for (const stats of report.values()) {
if (stats.type === 'inbound-rtp' && stats.remoteId) {
// remoteId verweist auf die id des remote-outbound-rtp-Eintrags
const remote = report.get(stats.remoteId);
console.log(remote.id === stats.remoteId, remote.type);
console.log('Vom Peer gesendete Pakete:', remote.packetsSent);
}
}
Sendebitrate der Gegenseite über die id verfolgen
const previous = new Map();
const measure = async (pc) => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type !== 'remote-outbound-rtp') return;
const prev = previous.get(stats.id);
if (prev) {
const seconds = (stats.timestamp - prev.timestamp) / 1000;
const kbps = ((stats.bytesSent - prev.bytesSent) * 8) / seconds / 1000;
console.log(`${stats.id}: ${kbps.toFixed(1)} kbit/s`);
}
previous.set(stats.id, stats);
});
};
setInterval(() => measure(pc), 2000);
// Wichtig · Fallstricke
- Format nicht garantiert: Der Aufbau der ID ist browserabhängig und kann sich ändern. Die ID nur als undurchsichtigen Schlüssel verwenden und nie nach Bestandteilen auswerten.
- Nur innerhalb einer Verbindung eindeutig: IDs verschiedener
RTCPeerConnection-Instanzen können gleich sein. Wer mehrere Verbindungen überwacht, sollte eigene Schlüssel vergeben, etwa Verbindung plusid. - Verzögertes Erscheinen:
remote-outbound-rtp-Einträge gibt es erst, wenn der erste RTCP-Sender-Report der Gegenseite angekommen ist. Direkt nach dem Verbindungsaufbau fehlen sie daher oft, undremoteIdaminbound-rtp-Eintrag ist nochundefined. - Kompatibilität: Wird von aktuellen Versionen von Chrome, Edge, Firefox und Safari unterstützt. Ältere Browser liefern diesen Statistiktyp teils nicht oder mit abweichenden Namen (z. B. frühere Firefox-Versionen über
isRemote).