Start · Sprachen · JavaScript · Referenz · RTCRemoteOutboundRtpStreamStats.ssrc

RTCRemoteOutboundRtpStreamStats.ssrc

Eigenschaft

Enthält die 32-Bit-Kennung der Synchronisationsquelle (SSRC), die den vom entfernten Peer gesendeten RTP-Strom eindeutig identifiziert.

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

Signatur

RTCRemoteOutboundRtpStreamStats.ssrc

Beschreibung

Die schreibgeschützte Eigenschaft ssrc eines RTCRemoteOutboundRtpStreamStats-Objekts (Statistiktyp "remote-outbound-rtp") enthält eine vorzeichenlose 32-Bit-Ganzzahl. Sie identifiziert die Synchronisationsquelle (Synchronization Source, SSRC) des RTP-Stroms, den der entfernte Peer an die lokale Seite sendet. Die Werte stammen aus RTCP-Sender-Reports (SR) des Gegenübers.

Der SSRC-Wert ist vor allem nützlich, um zusammengehörige Statistik-Einträge zu verknüpfen: Ein remote-outbound-rtp-Eintrag beschreibt denselben Medienstrom wie der lokale inbound-rtp-Eintrag mit identischer ssrc. Zusätzlich verweist localId direkt auf diesen Eintrag. So lassen sich die Angaben des Senders (etwa packetsSent, bytesSent, remoteTimestamp) mit den lokal empfangenen Werten (packetsReceived, packetsLost, jitter) vergleichen.

Die SSRC ist innerhalb einer RTP-Sitzung eindeutig. Sie kann sich aber ändern, etwa bei einer Neuverhandlung, bei Kollisionen oder wenn der Sender seinen Strom neu startet. Deshalb solltest du sie nicht als dauerhafte Kennung einer Spur speichern, sondern bei jedem Abruf von getStats() neu auswerten.

Beispiele

SSRC aller entfernten ausgehenden Ströme auslesen

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

await logRemoteOutboundSsrcs(pc);
audio: SSRC 3735928559 video: SSRC 1234567890

Sender- und Empfängerstatistik per SSRC verknüpfen

const compareStreams = async (pc) => {
  const report = await pc.getStats();
  const inbound = new Map();
  const remoteOut = [];

  report.forEach((s) => {
    if (s.type === 'inbound-rtp') inbound.set(s.ssrc, s);
    if (s.type === 'remote-outbound-rtp') remoteOut.push(s);
  });

  for (const r of remoteOut) {
    const local = inbound.get(r.ssrc);
    if (!local) continue;
    const fehlend = r.packetsSent - local.packetsReceived;
    console.log(`SSRC ${r.ssrc}: gesendet ${r.packetsSent}, empfangen ${local.packetsReceived}, Differenz ${fehlend}`);
  }
};

await compareStreams(pc);
SSRC 3735928559: gesendet 5120, empfangen 5098, Differenz 22

SSRC-Wechsel eines Empfängers überwachen

let letzteSsrc = null;

const pruefeSsrc = async (receiver) => {
  const report = await receiver.getStats();
  for (const s of report.values()) {
    if (s.type !== 'remote-outbound-rtp') continue;
    if (letzteSsrc !== null && s.ssrc !== letzteSsrc) {
      console.warn(`SSRC geändert: ${letzteSsrc} → ${s.ssrc}`);
    }
    letzteSsrc = s.ssrc;
  }
};

const [receiver] = pc.getReceivers();
setInterval(() => pruefeSsrc(receiver), 2000);
SSRC geändert: 3735928559 → 2882400018

// Wichtig · Fallstricke

  • Erst nach RTCP-Sender-Reports verfügbar: remote-outbound-rtp-Einträge erscheinen erst, wenn der Gegenüber mindestens einen RTCP-SR geschickt hat. Direkt nach dem Verbindungsaufbau fehlen sie daher oft.
  • Nicht mit Spur-IDs verwechseln: Die SSRC ist keine MediaStreamTrack.id und auch keine stabile Kennung. Bei Neuverhandlung, Simulcast oder SSRC-Kollision kann sie sich ändern.
  • Zahlenbereich: Der Wert ist eine vorzeichenlose 32-Bit-Zahl. Mit bitweisen Operatoren (|, &) wird er als vorzeichenbehaftet interpretiert und kann negativ werden. Nutze bei Bedarf >>> 0.
  • Datenschutz: SSRCs stehen auch im SDP (a=ssrc:) und sind nicht geheim. Beim Protokollieren solltest du sie trotzdem nur zusammen mit Sitzungskontext speichern.
  • Kompatibilität: Wird von aktuellen Chromium-Browsern, Firefox und Safari unterstützt. Einige ältere Browser liefern remote-outbound-rtp gar nicht oder unvollständig. Prüfe daher vor dem Zugriff, ob der Eintrag vorhanden ist.