Start · Sprachen · JavaScript · Referenz · RTCInboundRtpStreamStats.id

RTCInboundRtpStreamStats.id

Eigenschaft

Ein String, der das Statistikobjekt eines eingehenden RTP-Streams innerhalb eines <code>RTCStatsReport</code> eindeutig kennzeichnet.

seit JavaScript Baseline: Chrome, Edge, Firefox, Safari (WebRTC-St Kategorie: webapi

Signatur

RTCInboundRtpStreamStats.id

Beschreibung

Die Eigenschaft id des Wörterbuchs RTCInboundRtpStreamStats enthält einen String, der das überwachte Objekt – hier einen eingehenden RTP-Stream – eindeutig kennzeichnet. Sie wird von RTCStats geerbt und kommt deshalb in jedem Statistikobjekt vor, das RTCPeerConnection.getStats() liefert.

Der Wert ist zugleich der Schlüssel, unter dem das Objekt in der Map-artigen Struktur RTCStatsReport abgelegt ist. Mit report.get(id) kommt man also direkt an einen bestimmten Eintrag. Andere Statistikobjekte verweisen über Felder wie codecId, transportId oder remoteId auf solche IDs. So lassen sich die Einträge miteinander verknüpfen.

Wichtig für die Praxis: Der Browser vergibt die id für dasselbe überwachte Objekt bei allen getStats()-Aufrufen gleich. Deshalb eignet sie sich gut, um Messwerte über die Zeit zu vergleichen, etwa um aus bytesReceived die aktuelle Bitrate zu berechnen.

Rückgabewert

Typ
string
Beschreibung
Eine vom Browser erzeugte, innerhalb des Berichts eindeutige Kennung, z. B. "IT01V1234567" (Chrome) oder "{a1b2c3d4-...}" (Firefox). Das Format ist nicht festgelegt.

Beispiele

IDs aller eingehenden RTP-Streams auflisten

// pc ist eine verbundene RTCPeerConnection
const listInboundIds = async (pc) => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === 'inbound-rtp') {
      console.log(`${stats.kind}: ${stats.id}`);
    }
  });
};

await listInboundIds(pc);
audio: IT01A2890412345 video: IT01V3312298765

Bitrate über die stabile id berechnen

const previous = new Map();

const measureBitrate = async (pc) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type !== 'inbound-rtp') continue;
    const prev = previous.get(stats.id);
    if (prev) {
      const bytes = stats.bytesReceived - prev.bytesReceived;
      const ms = stats.timestamp - prev.timestamp;
      const kbps = Math.round((bytes * 8) / ms);
      console.log(`${stats.kind} (${stats.id}): ${kbps} kbit/s`);
    }
    previous.set(stats.id, stats);
  }
};

setInterval(() => measureBitrate(pc), 1000);
video (IT01V3312298765): 1480 kbit/s audio (IT01A2890412345): 34 kbit/s

Verknüpften Codec über die id nachschlagen

const report = await pc.getStats();
const inbound = [...report.values()].find(
  (s) => s.type === 'inbound-rtp' && s.kind === 'video'
);

// report.get() erwartet genau eine solche id
const codec = inbound?.codecId ? report.get(inbound.codecId) : undefined;
console.log(inbound.id, '→', codec?.mimeType);
console.log(report.get(inbound.id) === inbound);
IT01V3312298765 → video/VP8 true

// Wichtig · Fallstricke

  • Format nicht festgelegt: Das Format der id hängt vom Browser ab und kann sich zwischen Versionen ändern. Die ID also nicht zerlegen und nicht darauf setzen, dass bestimmte Präfixe wie IT vorkommen. Zum Filtern immer type === 'inbound-rtp' verwenden.
  • Nur für eine Verbindung eindeutig: Die ID gilt nur innerhalb derselben RTCPeerConnection. Bei mehreren Verbindungen können gleiche IDs vorkommen. Wer Daten zusammenführt, sollte deshalb die Verbindung mit in den Schlüssel aufnehmen.
  • Wird ein Stream beendet und neu ausgehandelt, etwa nach einer Neuverhandlung mit neuer SSRC, kann eine neue id entstehen. Alte Einträge in eigenen Zwischenspeichern sollten entfernt werden.
  • Die Eigenschaft kann nur gelesen werden. Sie hat keinen Bezug zu MediaStreamTrack.id oder MediaStream.id. Dafür gibt es in manchen Browsern trackIdentifier.
  • Kompatibilität: Alle modernen Browser unterstützen die Eigenschaft. Welche anderen Felder in RTCInboundRtpStreamStats vorhanden sind, unterscheidet sich teilweise.