Start · Sprachen · JavaScript · Referenz · RTCVideoSourceStats.id

RTCVideoSourceStats.id

Eigenschaft

Ein String, der das überwachte Objekt – hier die Videoquelle (Track) eines Senders – innerhalb eines <code>RTCStatsReport</code> eindeutig bezeichnet.

seit JavaScript Baseline: Chrome/Edge 90+, Firefox (teilweise), Sa Kategorie: webapi

Signatur

RTCVideoSourceStats.id

Beschreibung

Die schreibgeschützte Eigenschaft id eines RTCVideoSourceStats-Objekts ist ein String, der die Videoquelle eindeutig bezeichnet, zu der die Statistik gehört. Solche Objekte haben den type-Wert "media-source" und das Feld kind === "video". Sie beschreiben einen lokalen MediaStreamTrack, der an eine RTCPeerConnection angehängt ist, zum Beispiel mit Auflösung (width/height), frames und framesPerSecond.

Die id ist zugleich der Schlüssel des Eintrags in der Map-ähnlichen RTCStatsReport-Struktur. Mit report.get(id) kommt man also direkt an das Objekt. Außerdem verweisen andere Statistik-Objekte über diese ID auf die Quelle: Ein RTCOutboundRtpStreamStats-Eintrag enthält im Feld mediaSourceId genau diese id. So lassen sich Quelle und gesendeter RTP-Stream einander zuordnen.

Solange dasselbe Objekt überwacht wird, bleibt die ID über mehrere getStats()-Aufrufe gleich. Deshalb eignet sie sich gut, um Messwerte über die Zeit zu vergleichen, etwa um die Bildrate aus der Differenz zweier Messungen von frames und timestamp selbst zu berechnen.

Rückgabewert

Typ
string
Beschreibung
Eine vom Browser erzeugte, innerhalb der RTCPeerConnection eindeutige Zeichenkette (z. B. "SV1" oder "RTCVideoSource_2"). Das Format ist nicht standardisiert.

Beispiele

IDs aller Video-Quellen auslesen

const pc = new RTCPeerConnection();
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
stream.getTracks().forEach((track) => pc.addTrack(track, stream));

const report = await pc.getStats();
report.forEach((stats) => {
  if (stats.type === 'media-source' && stats.kind === 'video') {
    console.log('Video-Quelle:', stats.id, `${stats.width}x${stats.height}`);
  }
});
Video-Quelle: SV1 1280x720

Outbound-RTP-Stream seiner Quelle zuordnen

const logSourceForOutbound = async (pc) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type === 'outbound-rtp' && stats.kind === 'video') {
      // mediaSourceId verweist auf RTCVideoSourceStats.id
      const source = report.get(stats.mediaSourceId);
      console.log(`RTP ${stats.ssrc} ← Quelle ${source?.id}, ${source?.framesPerSecond} fps`);
    }
  }
};

await logSourceForOutbound(pc);
RTP 123456789 ← Quelle SV1, 30 fps

Bildrate über die stabile ID zwischen zwei Messungen berechnen

const measureFps = async (pc, intervalMs = 1000) => {
  const pick = (report) => [...report.values()]
    .filter((s) => s.type === 'media-source' && s.kind === 'video');

  const before = new Map(pick(await pc.getStats()).map((s) => [s.id, s]));
  await new Promise((r) => setTimeout(r, intervalMs));

  for (const now of pick(await pc.getStats())) {
    const prev = before.get(now.id);
    if (!prev) continue;
    const fps = ((now.frames - prev.frames) * 1000) / (now.timestamp - prev.timestamp);
    console.log(`${now.id}: ${fps.toFixed(1)} fps`);
  }
};

await measureFps(pc);
SV1: 29.9 fps

// Wichtig · Fallstricke

  • Format nicht festgelegt: Wie die ID aussieht, entscheidet der Browser. Sie unterscheidet sich zwischen Chrome, Firefox und Safari. Werte nie parsen und nicht fest im Code hinterlegen.
  • Nur innerhalb einer Verbindung eindeutig: Die ID gilt nur für die jeweilige RTCPeerConnection. Verschiedene Verbindungen können dieselbe ID verwenden. Nach replaceTrack() oder beim Neuaufbau der Verbindung kann ein neuer Eintrag mit neuer ID entstehen.
  • Nur für lokale, gesendete Tracks: media-source-Statistiken gibt es nur für Tracks, die über einen RTCRtpSender gesendet werden. Empfangene Streams erscheinen dagegen als inbound-rtp.
  • Browser-Unterstützung: Chromium-Browser unterstützen RTCVideoSourceStats vollständig, Safari ab Version 17. In Firefox fehlen je nach Version einzelne Felder wie framesPerSecond. Vor dem Zugriff also auf type und kind prüfen.
  • Die Eigenschaft ist von RTCStats geerbt und schreibgeschützt.