Start · Sprachen · JavaScript · Referenz · RTCVideoSourceStats.trackIdentifier

RTCVideoSourceStats.trackIdentifier

Eigenschaft

Enthält als String den Wert von <code>MediaStreamTrack.id</code> des Video-Tracks, der mit dieser Videoquelle verbunden ist.

seit JavaScript Chrome 108+, Firefox 115+ (Safari: teilweise) Kategorie: webapi

Signatur

RTCVideoSourceStats.trackIdentifier

Beschreibung

Die Eigenschaft trackIdentifier des Wörterbuchs RTCVideoSourceStats ist ein String. Sie enthält denselben Wert wie das Attribut id des MediaStreamTrack, der als Videoquelle an einen RTCRtpSender übergeben wurde. Statistikobjekte vom Typ "media-source" mit kind === "video" lassen sich so eindeutig einem lokalen Track zuordnen, etwa der Kamera oder einer Bildschirmfreigabe.

In der Praxis braucht man das, wenn eine Verbindung mehrere Videotracks sendet, zum Beispiel Kamera und Bildschirm gleichzeitig. Über trackIdentifier findet man in einem RTCStatsReport die Quellstatistiken wie width, height, frames und framesPerSecond zum passenden Track. Diese Werte kann man dann in der Oberfläche anzeigen oder für die Überwachung auswerten.

Die Eigenschaft ist schreibgeschützt. Sie gehört zu einem einfachen Datenobjekt, das von RTCPeerConnection.getStats() oder RTCRtpSender.getStats() geliefert wird. Das Objekt aktualisiert sich nicht selbst: Für neue Werte muss man getStats() erneut aufrufen.

Rückgabewert

Typ
string
Beschreibung
Die id des zugehörigen MediaStreamTrack. Sie hat oft die Form einer UUID, z. B. "3f2a…".

Beispiele

Videoquellen-Statistiken auflisten

const listVideoSources = async (pc) => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === 'media-source' && stats.kind === 'video') {
      console.log(`Track ${stats.trackIdentifier}: ${stats.width}x${stats.height} @ ${stats.framesPerSecond} fps`);
    }
  });
};

// Aufruf mit einer bestehenden RTCPeerConnection
await listVideoSources(pc);
Track 7c1e9b2a-...: 1280x720 @ 30 fps

Statistik einem bestimmten Kamera-Track zuordnen

const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const [cameraTrack] = stream.getVideoTracks();
const pc = new RTCPeerConnection();
pc.addTrack(cameraTrack, stream);

const getSourceStatsForTrack = async (track) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type === 'media-source' && stats.trackIdentifier === track.id) {
      return stats;
    }
  }
  return null;
};

const camStats = await getSourceStatsForTrack(cameraTrack);
console.log(camStats?.trackIdentifier === cameraTrack.id);
true

Kamera und Bildschirmfreigabe regelmäßig überwachen

const labels = new Map(); // track.id -> Bezeichnung

const addLabeledTrack = (pc, track, stream, label) => {
  labels.set(track.id, label);
  pc.addTrack(track, stream);
};

const monitor = (pc) => setInterval(async () => {
  const report = await pc.getStats();
  for (const s of report.values()) {
    if (s.type === 'media-source' && s.kind === 'video') {
      const label = labels.get(s.trackIdentifier) ?? 'unbekannt';
      console.log(`${label}: ${s.frames ?? 0} Frames insgesamt`);
    }
  }
}, 2000);
Kamera: 360 Frames insgesamt Bildschirm: 120 Frames insgesamt

// Wichtig · Fallstricke

  • Nicht zu verwechseln mit id: stats.id ist die ID des Statistikobjekts im Report. trackIdentifier ist dagegen die ID des MediaStreamTrack.
  • Nur lokale Quellen: RTCVideoSourceStats gibt es nur für gesendete Tracks. Auf der Empfängerseite heißt die entsprechende Eigenschaft RTCInboundRtpStreamStats.trackIdentifier.
  • Track ersetzen: Nach RTCRtpSender.replaceTrack() erscheint ein neues media-source-Objekt mit dem trackIdentifier des neuen Tracks. Zwischengespeicherte Zuordnungen sollten daher aktualisiert werden.
  • Filtern: Immer auf type === "media-source" und kind === "video" prüfen, denn Audioquellen (RTCAudioSourceStats) haben dieselbe Eigenschaft.
  • Kompatibilität: Wird von Chromium-Browsern und Firefox unterstützt. In Safari fehlen teilweise einzelne Felder. Deshalb optionale Verkettung (?.) verwenden und einen Ersatzwert vorsehen.