Start · Sprachen · JavaScript · Referenz · RTCRemoteInboundRtpStreamStats.ssrc

RTCRemoteInboundRtpStreamStats.ssrc

Eigenschaft

Liefert die 32-Bit-SSRC-Kennung (Synchronisationsquelle) des RTP-Streams, auf den sich diese Empfangsstatistik der Gegenstelle bezieht.

seit JavaScript Baseline: Chrome, Edge, Firefox, Safari (neuere Ve Kategorie: webapi

Signatur

RTCRemoteInboundRtpStreamStats.ssrc

Beschreibung

Die Eigenschaft ssrc eines RTCRemoteInboundRtpStreamStats-Objekts enthält eine positive 32-Bit-Ganzzahl ohne Vorzeichen. Sie identifiziert die Synchronisationsquelle (SSRC) des RTP-Streams. Der Wert steht im RTP-Header jedes Pakets und unterscheidet die Streams innerhalb einer RTP-Sitzung.

Ein Statistikobjekt vom Typ "remote-inbound-rtp" zeigt, wie die Gegenstelle einen Stream empfängt, den der lokale Peer sendet. Die Daten stammen aus RTCP-Receiver-Reports: verlorene Pakete, Jitter, Round-Trip-Time und Ähnliches. Die ssrc ist deshalb dieselbe wie beim zugehörigen lokalen "outbound-rtp"-Eintrag (RTCOutboundRtpStreamStats).

In der Praxis braucht man ssrc vor allem, um Statistiken einander zuzuordnen, etwa den Sendebericht (outbound) mit dem Empfangsbericht der Gegenseite (remote-inbound). Außerdem kann man damit Streams in Diagnose-Dashboards eindeutig kennzeichnen oder mit SDP-Zeilen wie a=ssrc: abgleichen. Direkter geht die Zuordnung oft über die Eigenschaften localId bzw. remoteId.

Rückgabewert

Typ
number
Beschreibung
Eine 32-Bit-Ganzzahl ohne Vorzeichen (0 bis 4294967295), also die SSRC-Kennung des RTP-Streams. Nur lesbar.

Beispiele

SSRC aller remote-inbound-Statistiken ausgeben

// pc ist eine verbundene RTCPeerConnection, die Medien sendet
const logRemoteInbound = async (pc) => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === 'remote-inbound-rtp') {
      console.log(`${stats.kind}: SSRC ${stats.ssrc}, Verlust ${stats.packetsLost}`);
    }
  });
};

await logRemoteInbound(pc);
audio: SSRC 3735928559, Verlust 2 video: SSRC 1234567890, Verlust 15

Outbound- und Remote-Inbound-Statistik über die SSRC zuordnen

const pairBySsrc = async (pc) => {
  const report = await pc.getStats();
  const outbound = new Map();
  const remoteInbound = new Map();

  for (const stats of report.values()) {
    if (stats.type === 'outbound-rtp') outbound.set(stats.ssrc, stats);
    if (stats.type === 'remote-inbound-rtp') remoteInbound.set(stats.ssrc, stats);
  }

  for (const [ssrc, out] of outbound) {
    const remote = remoteInbound.get(ssrc);
    if (!remote) continue; // noch kein RTCP-Receiver-Report eingetroffen
    const total = out.packetsSent + remote.packetsLost;
    const lossRate = total > 0 ? (remote.packetsLost / total) * 100 : 0;
    console.log(`SSRC ${ssrc}: ${lossRate.toFixed(2)} % Verlust, RTT ${remote.roundTripTime ?? '?'} s`);
  }
};

await pairBySsrc(pc);
SSRC 1234567890: 0.84 % Verlust, RTT 0.042 s

SSRC eines bestimmten Senders periodisch überwachen

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

const timer = setInterval(async () => {
  const report = await sender.getStats();
  for (const stats of report.values()) {
    if (stats.type === 'remote-inbound-rtp') {
      console.log(`Video-SSRC ${stats.ssrc.toString(16)} (hex), Jitter ${stats.jitter} s`);
    }
  }
}, 2000);

// später: clearInterval(timer);
Video-SSRC 499602d2 (hex), Jitter 0.003 s

// Wichtig · Fallstricke

  • Verzögerte Verfügbarkeit: remote-inbound-rtp-Einträge gibt es erst, wenn der erste RTCP-Receiver-Report der Gegenstelle angekommen ist. Direkt nach dem Verbindungsaufbau fehlen sie oft noch.
  • Nicht stabil: Die SSRC kann sich ändern, etwa nach einer Neuverhandlung, bei replaceTrack() in manchen Implementierungen oder bei einer SSRC-Kollision. Speichere sie deshalb nicht dauerhaft als Schlüssel.
  • Simulcast: Jede Simulcast-Ebene hat eine eigene SSRC. Ein einzelner Sender kann daher mehrere remote-inbound-rtp-Einträge liefern.
  • Keine Identität: Die SSRC ist zufällig gewählt und kein Merkmal zur Authentifizierung. Für die Zuordnung innerhalb eines Berichts ist localId oft zuverlässiger.
  • Kompatibilität: Wird von allen aktuellen Browsern unterstützt. Ältere Chrome-Versionen lieferten SSRCs über die veraltete, callback-basierte getStats()-API zum Teil als Zeichenkette.