Signatur
Beschreibung
Die Eigenschaft remoteId eines RTCInboundRtpStreamStats-Eintrags (Typ "inbound-rtp") verweist auf den passenden Statistik-Eintrag vom Typ "remote-outbound-rtp". Dieser beschreibt die Sicht des entfernten Peers auf denselben RTP-Strom, also wie viele Pakete und Bytes der Absender nach eigener Angabe verschickt hat.
Die Verknüpfung ist nützlich, um lokale Empfangswerte (z. B. packetsReceived, bytesReceived) mit den Sendewerten der Gegenseite (packetsSent, bytesSent, remoteTimestamp) zu vergleichen. So lassen sich Paketverluste, Verzögerungen oder Uhrenabweichungen zwischen den Peers genauer analysieren.
Die Daten der Gegenseite stammen aus RTCP-Sender-Reports (SR). Solange noch kein solcher Bericht eingegangen ist, existiert der entfernte Eintrag nicht und remoteId ist undefined. Den verknüpften Eintrag holt man per report.get(stats.remoteId) aus dem RTCStatsReport.
Rückgabewert
id des verknüpften RTCRemoteOutboundRtpStreamStats-Objekts im selben RTCStatsReport oder undefined, falls noch kein RTCP-Sender-Report vorliegt.Beispiele
Entfernten Sendebericht zu einem eingehenden Strom finden
// pc ist eine bestehende, verbundene RTCPeerConnection
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type === 'inbound-rtp' && stats.remoteId) {
const remote = report.get(stats.remoteId);
console.log(`${stats.kind}: empfangen ${stats.packetsReceived}, gesendet laut Gegenseite ${remote.packetsSent}`);
}
});
Paketverlust aus Sicht beider Seiten berechnen
const inboundLoss = async (receiver) => {
const report = await receiver.getStats();
for (const stats of report.values()) {
if (stats.type !== 'inbound-rtp') continue;
const remote = stats.remoteId ? report.get(stats.remoteId) : undefined;
if (!remote) return null; // noch kein RTCP-Sender-Report
const lost = remote.packetsSent - stats.packetsReceived;
return { lost, quote: (lost / remote.packetsSent * 100).toFixed(2) + ' %' };
}
return null;
};
const [receiver] = pc.getReceivers();
console.log(await inboundLoss(receiver));
Periodisch überwachen, bis remoteId verfügbar ist
const timer = setInterval(async () => {
const report = await pc.getStats();
const inbound = [...report.values()].find((s) => s.type === 'inbound-rtp' && s.kind === 'audio');
if (inbound?.remoteId) {
const remote = report.get(inbound.remoteId);
console.log('Entfernter Zeitstempel:', remote.remoteTimestamp);
clearInterval(timer);
} else {
console.log('Noch kein Sender-Report empfangen …');
}
}, 1000);
// Wichtig · Fallstricke
- Kann fehlen: Direkt nach dem Verbindungsaufbau ist
remoteIdmeistundefined, weil RTCP-Sender-Reports erst nach einigen Sekunden eintreffen. Immer prüfen, bevor manreport.get()aufruft. - Nur im selben Report gültig: Die
idsollte nur im selbenRTCStatsReportnachgeschlagen werden. Zwischen zweigetStats()-Aufrufen sind die IDs zwar meist stabil, garantiert ist das aber nicht. - Uhrenabweichung: Werte wie
remoteTimestampim verknüpften Eintrag beruhen auf der Uhr des entfernten Peers und lassen sich nicht direkt mit lokalen Zeitstempeln vergleichen. - Kompatibilität: Aktuelle Versionen von Chrome, Edge, Firefox und Safari unterstützen die Eigenschaft. Ältere Browser liefern
"remote-outbound-rtp"-Statistiken teils gar nicht oder mit Abweichungen. Bei Bedarf Feature-Erkennung per'remoteId' in statsnutzen.