Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

RTCStatsReport

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨Januar 2020⁩.

* Some parts of this feature may have varying levels of support.

Das RTCStatsReport-Interface der WebRTC API stellt einen Statistikbericht für eine RTCPeerConnection, einen RTCRtpSender oder einen RTCRtpReceiver bereit.

Eine Instanz von RTCStatsReport ist ein schreibgeschütztes Map-ähnliches Objekt, in dem jeder Schlüssel ein Bezeichner für ein Objekt ist, für das Statistiken gemeldet werden, und der entsprechende Wert ein Wörterbuchobjekt ist, das die Statistiken bereitstellt.

Instanzeigenschaften

RTCStatsReport.size

Gibt die Anzahl der Elemente im RTCStatsReport-Objekt zurück.

Instanzmethoden

RTCStatsReport.entries()

Gibt ein neues Iterator-Objekt zurück, das ein zweigliedriges Array aus [id, statistik-wörterbuch] für jedes Element im RTCStatsReport-Objekt in Einfügereihenfolge enthält.

RTCStatsReport.forEach()

Ruft callbackFn einmal für jedes im RTCStatsReport-Objekt vorhandene Schlüssel-Wert-Paar in Einfügereihenfolge auf. Wenn ein thisArg-Parameter an forEach übergeben wird, wird er als this-Wert für jeden Rückruf verwendet.

RTCStatsReport.get()

Gibt das Statistik-Wörterbuch zurück, das mit der übergebenen id verknüpft ist, oder undefined, wenn keines vorhanden ist.

RTCStatsReport.has()

Gibt einen booleschen Wert zurück, der angibt, ob das RTCStatsReport ein mit der angegebenen id verknüpftes Statistik-Wörterbuch enthält.

RTCStatsReport.keys()

Gibt ein neues Iterator-Objekt zurück, das die Schlüssel (IDs) für jedes Element im RTCStatsReport-Objekt in Einfügereihenfolge enthält.

RTCStatsReport.values()

Gibt ein neues Iterator-Objekt zurück, das die Werte (Statistikobjek) für jedes Element im RTCStatsReport-Objekt in Einfügereihenfolge enthält.

RTCStatsReport[Symbol.iterator]()

Gibt ein neues Iterator-Objekt zurück, das ein zweigliedriges Array aus [id, statistik-wörterbuch] für jedes Element im RTCStatsReport-Objekt in Einfügereihenfolge enthält.

Beschreibung

Ein Promise, das sich zu einem RTCStatsReport auflöst, wird von den Methoden RTCRtpReceiver.getStats(), RTCRtpSender.getStats() und RTCPeerConnection.getStats() zurückgegeben. Ein Aufruf von getStats() auf einer RTCPeerConnection ermöglicht Ihnen anzugeben, ob Sie ausgehende Statistiken, eingehende Statistiken oder Statistiken für die gesamte Verbindung erhalten möchten. Die getStats()-Versionen von RTCRtpReceiver und RTCRtpSender geben nur jeweils eingehende bzw. ausgehende Statistiken zurück.

Der Statistikbericht ist ein schreibgeschütztes Map-ähnliches Objekt: ein geordnetes Wörterbuch, bei dem die Eigenschaften id-Strings sind, die eindeutig das WebRTC-Objekt identifizieren, das überprüft wurde, um einen bestimmten Satz von Statistiken zu erzeugen, und der Wert ein Wörterbuchobjekt ist, das diese Statistiken enthält. Ein RTCStatsReport kann iteriert und auf dieselbe Weise wie eine schreibgeschützte Map verwendet werden.

Der Bericht kann viele verschiedene Kategorien von Statistiken enthalten, einschließlich eingehender und ausgehender Statistiken sowohl für die aktuelle als auch für die entfernte Seite der Peer-Verbindung, Informationen über verwendete Codecs, Zertifikate und Medien, und so weiter. Jede Statistik-Kategorie wird in einem anderen Typ von Statistik-Wörterbuchobjekt bereitgestellt, das an seiner type-Eigenschaft erkannt werden kann.

Allgemeine Instanzeigenschaften

Alle Wörterbuchtypen haben die folgenden Eigenschaften:

id

Ein String, der das Objekt eindeutig identifiziert, das zur Erstellung des Satzes von Statistiken überwacht wurde. Dieser Wert bleibt für (mindestens) die Lebensdauer der Verbindung über Berichte hinweg bestehen. Beachten Sie jedoch, dass bei einigen Statistiken die ID zwischen Browsern und für nachfolgende Verbindungen, selbst zu demselben Peer, variieren kann.

timestamp

Ein hochauflösendes Zeitstempelobjekt (DOMHighResTimeStamp), das den Zeitpunkt angibt, zu dem die Probe genommen wurde. Viele gemeldete Statistiken sind kumulative Werte; der Zeitstempel ermöglicht es, Raten und Durchschnitte zwischen zwei Berichten bei jeder gewünschten Berichterstellungsrate zu berechnen.

type

Ein String mit einem Wert, der den Typ der Statistiken angibt, die das Objekt enthält, wie z.B. candidate-pair, inbound-rtp, certificate, und so weiter. Die Statistiktypen und deren entsprechende Objekte sind unten aufgeführt.

Benutzer iterieren typischerweise ein RTCStatsReport, indem sie eine forEach() oder eine for...of-Schleife verwenden und die interessierenden Statistiken anhand der type-Eigenschaft auswählen. Sobald ein bestimmtes Statistikobjekt anhand seines type identifiziert wurde, kann die id-Eigenschaft anschließend mit get() verwendet werden, um denselben Statistikbericht zu einem anderen Zeitpunkt zu erhalten.

Der Zeitstempel kann verwendet werden, um Durchschnittswerte für Statistiken zu berechnen, die sich über die Lebensdauer einer Verbindung ansammeln.

Die Statistiktypen

Die Statistik-type-Werte und ihre entsprechenden Wörterbücher sind unten aufgeführt.

Typ Wörterbuch Beschreibung
candidate-pair RTCIceCandidatePairStats Statistiken, die die Änderung von einem RTCIceTransport zu einem anderen beschreiben, wie beispielsweise während eines ICE-Neustarts.
certificate RTCCertificateStats Statistiken über ein Zertifikat, das von einem RTCIceTransport verwendet wird.
codec RTCCodecStats Statistiken über einen bestimmten Codec, der von über diese Verbindung gesendeten oder empfangenen Streams verwendet wird.
data-channel RTCDataChannelStats Statistiken in Bezug auf einen RTCDataChannel in der Verbindung.
inbound-rtp RTCInboundRtpStreamStats Statistiken, die den Zustand eines der eingehenden Datenströme der Verbindung beschreiben.
local-candidate RTCIceCandidateStats Statistiken über einen lokalen ICE-Kandidaten, der mit den RTCIceTransports der Verbindung verknüpft ist.
media-source RTCAudioSourceStats oder RTCVideoSourceStats Statistiken über das von dem MediaStreamTrack produzierte Medium, das an einen RTP-Sender angehängt ist. Das Wörterbuch, dem dieser Schlüssel zugeordnet ist, hängt von der kind des Tracks ab.
outbound-rtp RTCOutboundRtpStreamStats Statistiken, die den Zustand eines der ausgehenden Datenströme auf dieser Verbindung beschreiben.
peer-connection RTCPeerConnectionStats Statistiken, die den Zustand der RTCPeerConnection beschreiben.
remote-candidate RTCIceCandidateStats Statistiken über einen entfernten ICE-Kandidaten, der mit den RTCIceTransports der Verbindung verknüpft ist.
remote-inbound-rtp RTCRemoteInboundRtpStreamStats Statistiken, die den Zustand des eingehenden Datenstroms aus der Perspektive des entfernten Peers beschreiben.
remote-outbound-rtp RTCRemoteOutboundRtpStreamStats Statistiken, die den Zustand des ausgehenden Datenstroms aus der Perspektive des entfernten Peers beschreiben.
transport RTCTransportStats Statistiken über ein Transportmittel, das von der Verbindung verwendet wird.

Beispiele

Bericht von einer RTCPeerConnection mit einer forEach-Schleife iterieren

Dieses Beispiel zeigt, wie Sie videobezogene Statistiken für das lokale RTCRtpReceiver, das für den Empfang von gestreamten Medien verantwortlich ist, protokollieren können.

Angenommen, eine Variable myPeerConnection ist eine Instanz von RTCPeerConnection, verwendet der Code await, um auf den Statistikbericht zu warten, und iteriert dann mit RTCStatsReport.forEach(). Anschließend werden die Wörterbücher nur für die Berichte gefiltert, die den type von inbound-rtp und kind von video haben.

js
const stats = await myPeerConnection.getStats();

stats.forEach((report) => {
  if (report.type === "inbound-rtp" && report.kind === "video") {
    // Log the frame rate
    console.log(report.framesPerSecond);
  }
});

Bericht von einem RTCRtpSender mit einer for...of-Schleife iterieren

Dieses Beispiel zeigt, wie Sie die ausgehenden Statistiken von einem RTCRtpSender iterieren können.

Der Code folgt einem ähnlichen Muster wie das vorherige Beispiel, jedoch wird er mit einer for...of-Schleife auf den RTCStatsReport.values() iteriert und auf den type von outbound-rtp gefiltert. Es wird davon ausgegangen, dass Sie bereits ein RTCRtpSender-Objekt namens "sender" haben.

js
const stats = await sender.getStats();

for (const stat of stats.values()) {
  if (stat.type !== "outbound-rtp") continue;
  Object.keys(stat).forEach((statName) => {
    console.log(`${statName}: ${stat[statName]}`);
  });
}

Spezifikationen

Specification
WebRTC: Real-Time Communication in Browsers
# rtcstatsreport-object

Browser-Kompatibilität

Siehe auch