Start · Sprachen · JavaScript · Referenz · RTCInboundRtpStreamStats.remoteId

RTCInboundRtpStreamStats.remoteId

Eigenschaft

Enthält die <code>id</code> des zugehörigen <code>RTCRemoteOutboundRtpStreamStats</code>-Objekts, das den sendenden <code>RTCRtpSender</code> des entfernten Peers beschreibt.

seit JavaScript Baseline: Chrome, Edge, Firefox, Safari (neuere Ve Kategorie: webapi

Signatur

RTCInboundRtpStreamStats.remoteId

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

Typ
string | undefined
Beschreibung
Die 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}`);
  }
});
video: empfangen 4812, gesendet laut Gegenseite 4830

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));
{ lost: 18, quote: '0.37 %' }

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);
Noch kein Sender-Report empfangen … Entfernter Zeitstempel: 1718031234567.12

// Wichtig · Fallstricke

  • Kann fehlen: Direkt nach dem Verbindungsaufbau ist remoteId meist undefined, weil RTCP-Sender-Reports erst nach einigen Sekunden eintreffen. Immer prüfen, bevor man report.get() aufruft.
  • Nur im selben Report gültig: Die id sollte nur im selben RTCStatsReport nachgeschlagen werden. Zwischen zwei getStats()-Aufrufen sind die IDs zwar meist stabil, garantiert ist das aber nicht.
  • Uhrenabweichung: Werte wie remoteTimestamp im 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 stats nutzen.