Start · Sprachen · JavaScript · Referenz · RTCInboundRtpStreamStats.trackIdentifier

RTCInboundRtpStreamStats.trackIdentifier

Eigenschaft

String mit der <code>id</code> des <code>MediaStreamTrack</code>, der zum eingehenden RTP-Stream gehört, also die ID des empfangenen Tracks.

seit JavaScript Baseline 2023: Chrome 115+, Firefox 110+, Safari 1 Kategorie: webapi

Signatur

RTCInboundRtpStreamStats.trackIdentifier

Beschreibung

Die Eigenschaft trackIdentifier des Wörterbuchs RTCInboundRtpStreamStats enthält einen String. Er entspricht dem Wert von MediaStreamTrack.id des Tracks, über den die eingehenden Medien eines RTP-Streams ausgegeben werden. Über diesen Wert ordnest du eine Statistik vom Typ "inbound-rtp" eindeutig einem konkreten Empfangs-Track zu, zum Beispiel dem Track aus RTCRtpReceiver.track oder aus dem track-Ereignis.

Das ist vor allem bei Verbindungen mit mehreren Audio- und Videospuren nützlich, etwa bei Videokonferenzen mit mehreren Teilnehmern. Mit trackIdentifier zeigst du Werte wie packetsLost, jitter oder framesPerSecond beim richtigen Video-Element an.

Die Eigenschaft hat die frühere Verknüpfung über trackId und die inzwischen entfernten Statistiken vom Typ "track" abgelöst. Die ID stammt vom lokal erzeugten Empfangs-Track. Sie muss nicht mit der Track-ID auf der Senderseite übereinstimmen.

Beispiele

Track-IDs aller eingehenden Streams ausgeben

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

await listInboundTracks(pc);
audio: 5f3c1e2a-... video: 9b7d4a10-...

Statistik einem empfangenen Track zuordnen

pc.addEventListener('track', async ({ track }) => {
  // Kurz warten, bis erste Pakete eingegangen sind
  await new Promise((r) => setTimeout(r, 2000));
  const report = await pc.getStats();
  const inbound = [...report.values()].find(
    (s) => s.type === 'inbound-rtp' && s.trackIdentifier === track.id
  );
  if (inbound) {
    console.log(`Track ${track.kind}: ${inbound.packetsReceived} Pakete, ${inbound.packetsLost} verloren`);
  }
});
Track video: 1834 Pakete, 3 verloren

Periodisches Monitoring pro Video-Element

// Zuordnung Track-ID → Video-Element
const videoByTrackId = new Map();

pc.addEventListener('track', ({ track, streams }) => {
  if (track.kind !== 'video') return;
  const video = document.createElement('video');
  video.autoplay = true;
  video.srcObject = streams[0] ?? new MediaStream([track]);
  document.body.append(video);
  videoByTrackId.set(track.id, video);
});

setInterval(async () => {
  const report = await pc.getStats();
  for (const s of report.values()) {
    if (s.type !== 'inbound-rtp' || s.kind !== 'video') continue;
    const video = videoByTrackId.get(s.trackIdentifier);
    if (video) video.title = `${s.framesPerSecond ?? 0} fps, Jitter ${s.jitter?.toFixed(3)} s`;
  }
}, 1000);

// Wichtig · Fallstricke

  • Der Wert ist die lokale ID des empfangenden Tracks. Er stimmt in der Regel nicht mit der Track-ID des Senders oder der msid im SDP überein. Verwende ihn deshalb nicht, um Tracks über beide Seiten hinweg abzugleichen.
  • Ein "inbound-rtp"-Eintrag erscheint häufig erst, wenn tatsächlich RTP-Pakete empfangen wurden. Direkt nach dem track-Ereignis kann er noch fehlen.
  • Ältere Browser liefern statt trackIdentifier das veraltete trackId, das auf eine "track"-Statistik verweist. Prüfe in diesem Fall beide Varianten, z. B. mit s.trackIdentifier ?? s.trackId.
  • Bei Simulcast oder wenn ein Receiver per replaceTrack bzw. neuer Aushandlung wiederverwendet wird, kann derselbe Track über die Zeit zu verschiedenen RTP-Streams (SSRC) gehören. Werte die Statistik bei Bedarf zusätzlich nach ssrc aus.
  • Der Aufruf von getStats() ist vergleichsweise teuer. Frage die Statistik nicht öfter als etwa einmal pro Sekunde ab.