Start · Sprachen · JavaScript · Referenz · RTCRemoteInboundRtpStreamStats.id

RTCRemoteInboundRtpStreamStats.id

Eigenschaft

String, der das Statistikobjekt vom Typ <code>remote-inbound-rtp</code> innerhalb eines <code>RTCStatsReport</code> eindeutig identifiziert.

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

Signatur

RTCRemoteInboundRtpStreamStats.id

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

Typ
string
Beschreibung
Eine eindeutige, über mehrere 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);
ID: RI1234abcd, kind: video, RTT: 0.042

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}`);
    }
  }
};
OT01V1234 -> RI01V1234, verloren: 3

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);
RI1234abcd: 2 neue verlorene Pakete

// Wichtig · Fallstricke

  • Das Format der id ist nicht standardisiert. Werte wie "RI01V1234" (Chrome) oder zufällige Strings (Firefox) dürfen nicht zerlegt werden. Verwende die id nur 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 id ist nur innerhalb einer RTCPeerConnection eindeutig. 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'.