Start · Sprachen · JavaScript · Referenz · RTCRemoteOutboundRtpStreamStats.id

RTCRemoteOutboundRtpStreamStats.id

Eigenschaft

Eine Zeichenkette, die das <code>RTCRemoteOutboundRtpStreamStats</code>-Objekt innerhalb eines <code>RTCStatsReport</code> eindeutig identifiziert.

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

Signatur

RTCRemoteOutboundRtpStreamStats.id

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

Typ
string
Beschreibung
Eine vom Browser erzeugte, innerhalb der 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);
audio: ROA2615437408 video: ROV1784120392

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);
  }
}
true remote-outbound-rtp Vom Peer gesendete Pakete: 4821

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);
ROV1784120392: 1210.4 kbit/s

// 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 plus id.
  • 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, und remoteId am inbound-rtp-Eintrag ist noch undefined.
  • 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).