Start · Sprachen · JavaScript · Referenz · RTCInboundRtpStreamStats.packetsReceived

RTCInboundRtpStreamStats.packetsReceived

Eigenschaft

Gibt die Gesamtzahl der RTP-Pakete an, die für die SSRC dieses eingehenden Streams empfangen wurden, einschließlich erneut übertragener Pakete.

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

Signatur

RTCInboundRtpStreamStats.packetsReceived

Beschreibung

Die Eigenschaft packetsReceived eines RTCInboundRtpStreamStats-Objekts enthält einen fortlaufenden Zähler: die Gesamtzahl der RTP-Pakete, die seit Beginn der Verbindung von der Synchronisationsquelle (SSRC) dieses Streams empfangen wurden. Erneut übertragene Pakete (Retransmissions) werden mitgezählt. Die Eigenschaft wird eigentlich in RTCReceivedRtpStreamStats definiert und von RTCInboundRtpStreamStats geerbt.

Du erhältst den Wert, indem du RTCPeerConnection.getStats() oder RTCRtpReceiver.getStats() aufrufst und im zurückgegebenen RTCStatsReport nach Einträgen mit type === "inbound-rtp" filterst. Für jede empfangene Audio- bzw. Videospur gibt es einen eigenen Eintrag.

Typische Einsatzzwecke sind Verbindungsqualitäts-Anzeigen, Paketverlust-Berechnungen (zusammen mit packetsLost) und Paketraten-Messungen. Da der Wert kumulativ ist, bildest du für aussagekräftige Raten immer die Differenz zweier Messungen und teilst sie durch die Zeitdifferenz der jeweiligen timestamp-Werte.

Rückgabewert

Typ
number
Beschreibung
Eine nicht-negative Ganzzahl (in der Spezifikation unsigned long long) mit der Gesamtzahl empfangener RTP-Pakete für diese SSRC.

Beispiele

Empfangene Pakete aller eingehenden Streams ausgeben

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

await logInboundPackets(pc);
audio (SSRC 1234567890): 5021 Pakete video (SSRC 987654321): 18433 Pakete

Paketverlustrate eines Empfängers berechnen

const getLossRate = async (receiver) => {
  const report = await receiver.getStats();
  for (const stats of report.values()) {
    if (stats.type === 'inbound-rtp') {
      const lost = stats.packetsLost ?? 0;
      const total = stats.packetsReceived + lost;
      return total > 0 ? (lost / total) * 100 : 0;
    }
  }
  return null;
};

const [videoReceiver] = pc.getReceivers().filter((r) => r.track.kind === 'video');
const rate = await getLossRate(videoReceiver);
console.log(`Paketverlust: ${rate.toFixed(2)} %`);
Paketverlust: 0.84 %

Paketrate pro Sekunde periodisch messen

const previous = new Map();

const measurePacketRate = async (pc) => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type !== 'inbound-rtp') return;
    const prev = previous.get(stats.id);
    if (prev) {
      const seconds = (stats.timestamp - prev.timestamp) / 1000;
      const pps = (stats.packetsReceived - prev.packetsReceived) / seconds;
      console.log(`${stats.kind}: ${pps.toFixed(1)} Pakete/s`);
    }
    previous.set(stats.id, { timestamp: stats.timestamp, packetsReceived: stats.packetsReceived });
  });
};

const timer = setInterval(() => measurePacketRate(pc), 1000);
// Später beenden: clearInterval(timer);
audio: 50.0 Pakete/s video: 312.4 Pakete/s

// Wichtig · Fallstricke

  • Kumulativer Zähler: Der Wert wächst nur an. Für Raten immer Differenzen zwischen zwei Berichten bilden und durch die Differenz von timestamp (in Millisekunden) teilen.
  • Retransmissions: Erneut übertragene Pakete sind enthalten. Wer sie getrennt betrachten will, nutzt zusätzlich retransmittedPacketsReceived (nicht in allen Browsern verfügbar).
  • Nicht mit dem Verlust verrechnet: packetsReceived sagt allein nichts über die Qualität aus. Für die Verlustrate packetsLost heranziehen; beachte, dass packetsLost durch Duplikate auch negativ werden kann.
  • Stream-Identität: Ändert sich die SSRC (z. B. nach Neuverhandlung oder Simulcast-Umschaltung), entsteht ein neuer Statistik-Eintrag mit neuer id — der Zähler beginnt dann wieder bei 0.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt. Ältere Implementierungen lieferten Einträge mit abweichendem type (z. B. "ssrc" in altem Chrome); Code sollte fehlende Felder defensiv behandeln.