Start · Sprachen · JavaScript · Referenz · RTCInboundRtpStreamStats.type

RTCInboundRtpStreamStats.type

Eigenschaft

Die <code>type</code>-Eigenschaft eines <code>RTCInboundRtpStreamStats</code>-Objekts ist immer der String <code>"inbound-rtp"</code> und kennzeichnet Statistiken eines eingehenden RTP-Streams.

seit JavaScript Baseline: alle modernen Browser (Chrome, Edge, Fir Kategorie: webapi

Signatur

RTCInboundRtpStreamStats.type

Beschreibung

Die schreibgeschützte Eigenschaft type gehört zum Wörterbuch RTCInboundRtpStreamStats und hat immer den Wert "inbound-rtp". Sie wird von RTCStats geerbt. Jedes Statistikobjekt in einem RTCStatsReport hat so eine Eigenschaft, über die man seine Art erkennt.

Ein Aufruf von RTCPeerConnection.getStats(), RTCRtpReceiver.getStats() oder RTCRtpSender.getStats() liefert einen RTCStatsReport. Das ist eine Map-ähnliche Sammlung mit vielen verschiedenen Statistikobjekten, etwa zu Kandidatenpaaren, Codecs, Transporten sowie ein- und ausgehenden Streams. Wenn Sie nach type === "inbound-rtp" filtern, bleiben nur die Einträge zu empfangenen Audio- und Videodaten übrig. Dazu gehören zum Beispiel packetsLost, jitter, bytesReceived oder framesDecoded.

Typische Anwendungen sind die Überwachung der Verbindungsqualität, die Berechnung der empfangenen Bitrate oder die Erkennung von Paketverlusten in Videokonferenz-Anwendungen. Ob es sich um Audio oder Video handelt, steht nicht in type. Dafür wertet man zusätzlich die Eigenschaft kind aus.

Rückgabewert

Typ
string
Beschreibung
Immer der String "inbound-rtp". Er ist ein Wert der Aufzählung RTCStatsType.

Beispiele

Eingehende RTP-Statistiken aus einem Bericht filtern

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

logInboundStats(pc);
audio: 5120 Pakete, 3 verloren video: 18342 Pakete, 27 verloren

Empfangene Video-Bitrate periodisch berechnen

let previous = null;

const measureBitrate = async (pc) => {
  const report = await pc.getStats();
  const video = [...report.values()].find(
    (s) => s.type === "inbound-rtp" && s.kind === "video"
  );
  if (!video) return;

  if (previous) {
    const bytes = video.bytesReceived - previous.bytesReceived;
    const seconds = (video.timestamp - previous.timestamp) / 1000;
    const kbps = Math.round((bytes * 8) / seconds / 1000);
    console.log(`Video-Bitrate: ${kbps} kbit/s`);
  }
  previous = video;
};

const timer = setInterval(() => measureBitrate(pc), 1000);
// Später: clearInterval(timer);
Video-Bitrate: 1487 kbit/s

Statistiken eines einzelnen Empfängers abfragen

const [receiver] = pc.getReceivers();
const report = await receiver.getStats();

const inbound = [...report.values()].filter((s) => s.type === "inbound-rtp");
console.log(inbound.map((s) => ({ type: s.type, kind: s.kind, jitter: s.jitter })));
[{ type: "inbound-rtp", kind: "audio", jitter: 0.004 }]

// Wichtig · Fallstricke

  • Verwechseln Sie "inbound-rtp" nicht mit "remote-inbound-rtp". Letzteres beschreibt die Statistiken, die die Gegenstelle per RTCP über Ihren gesendeten Stream zurückmeldet (RTCRemoteInboundRtpStreamStats).
  • Ob Audio oder Video empfangen wird, zeigt type nicht an. Prüfen Sie dafür immer zusätzlich kind. Die veraltete Eigenschaft mediaType sollten Sie nicht mehr verwenden.
  • Ein RTCStatsReport ist kein Array, sondern ein Map-ähnliches Objekt. Nutzen Sie forEach(), values() oder den Spread-Operator zum Durchlaufen.
  • Direkt nach dem Verbindungsaufbau gibt es eventuell noch keine inbound-rtp-Einträge. Solche Einträge erscheinen erst, wenn tatsächlich RTP-Pakete empfangen werden.
  • Browser-Kompatibilität: Der Typwert wird von allen modernen Browsern unterstützt. Welche Einzelfelder vorhanden sind, unterscheidet sich aber je nach Browser. Prüfen Sie Felder deshalb vor der Verwendung auf undefined.