Start · Sprachen · JavaScript · Referenz · RTCOutboundRtpStreamStats.id

RTCOutboundRtpStreamStats.id

Eigenschaft

String, der das überwachte Objekt eines <code>outbound-rtp</code>-Statistikberichts eindeutig identifiziert und in allen Berichten derselben Quelle gleich bleibt.

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

Signatur

RTCOutboundRtpStreamStats.id

Beschreibung

Die Eigenschaft id des Wörterbuchs RTCOutboundRtpStreamStats ist ein String, der das Objekt eindeutig identifiziert, dessen Statistiken dieser Bericht enthält. Bei outbound-rtp-Berichten ist das ein ausgehender RTP-Stream, also Audio- oder Videodaten, die ein RTCRtpSender an die Gegenstelle sendet.

Die id dient zugleich als Schlüssel im RTCStatsReport, den RTCPeerConnection.getStats() oder RTCRtpSender.getStats() liefert. Solange das überwachte Objekt besteht, bleibt die ID in allen Berichten gleich. Deshalb eignet sie sich gut, um Werte aus mehreren Abfragen einander zuzuordnen, etwa um die Bitrate aus der Differenz von bytesSent zwischen zwei Messzeitpunkten zu berechnen.

Andere Statistikobjekte verweisen über ihre ID auf diesen Stream. Umgekehrt verweist der outbound-rtp-Bericht über Eigenschaften wie codecId, transportId, mediaSourceId oder remoteId auf verwandte Berichte. Diese Verweise löst man mit report.get(id) auf.

Rückgabewert

Typ
string
Beschreibung
Eine eindeutige, vom Browser vergebene Kennung des überwachten ausgehenden RTP-Streams. Sie ist zugleich der Schlüssel dieses Eintrags im RTCStatsReport.

Beispiele

IDs aller ausgehenden RTP-Streams auflisten

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

await listOutboundIds(pc);
audio: OT01A1234567 video: OT01V7654321

Sende-Bitrate über zwei Messungen hinweg berechnen

const previous = new Map();

const measureBitrate = async (pc) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type !== 'outbound-rtp') continue;
    const prev = previous.get(stats.id); // gleiche id = gleicher Stream
    if (prev) {
      const bits = (stats.bytesSent - prev.bytesSent) * 8;
      const seconds = (stats.timestamp - prev.timestamp) / 1000;
      console.log(`${stats.id}: ${Math.round(bits / seconds / 1000)} kbit/s`);
    }
    previous.set(stats.id, stats);
  }
};

setInterval(() => measureBitrate(pc), 1000);
OT01V7654321: 1480 kbit/s

Verknüpfte Berichte über IDs auflösen

const [sender] = pc.getSenders().filter((s) => s.track?.kind === 'video');
const report = await sender.getStats();

const outbound = [...report.values()].find((s) => s.type === 'outbound-rtp');
const codec = report.get(outbound.codecId);

console.log(report.get(outbound.id) === outbound);
console.log(codec?.mimeType);
true video/VP8

// Wichtig · Fallstricke

  • Das Format der ID ist nicht standardisiert und unterscheidet sich je nach Browser, z. B. OT01V… in Chrome oder eine UUID-ähnliche Zeichenfolge in Firefox. Werten Sie den Inhalt nicht aus. Verwenden Sie die ID nur, um Berichte zu vergleichen oder nachzuschlagen.
  • Die ID gilt nur innerhalb derselben RTCPeerConnection und nur für die Lebensdauer des überwachten Objekts. Nach einer Neuverhandlung oder einem Aufruf von replaceTrack() kann ein Stream eine neue ID bekommen. Veraltete Einträge in eigenen Maps sollten Sie deshalb entfernen.
  • Bei Simulcast gibt es pro Layer einen eigenen outbound-rtp-Bericht mit eigener ID. Zur Unterscheidung dient zusätzlich rid bzw. ssrc.
  • Die ID ist nicht über Geräte hinweg gültig. Die Gegenstelle vergibt eigene IDs. Den passenden Bericht der Gegenstelle findet man über remoteId, das auf einen lokalen remote-inbound-rtp-Bericht verweist.
  • Die Eigenschaft wird von RTCStats geerbt und ist in allen modernen Browsern mit WebRTC-Unterstützung verfügbar.