RTCStatsReport
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
Die RTCStatsReport
-Schnittstelle der WebRTC API bietet einen Statistikbericht für eine RTCPeerConnection
, RTCRtpSender
oder RTCRtpReceiver
.
Eine RTCStatsReport
-Instanz ist ein schreibgeschütztes Map-ähnliches Objekt, in dem jeder Schlüssel ein Identifikator für ein Objekt ist, für das Statistiken erstellt werden, und der entsprechende Wert ein Wörterbuchobjekt ist, das die Statistiken bereitstellt.
Instanz-Eigenschaften
RTCStatsReport.size
-
Gibt die Anzahl der Elemente im
RTCStatsReport
-Objekt zurück.
Instanz-Methoden
RTCStatsReport.entries()
-
Gibt ein neues Iterator-Objekt zurück, das ein zweigliedriges Array von
[id, statistic-dictionary]
für jedes Element imRTCStatsReport
-Objekt in Einfügungsreihenfolge enthält. RTCStatsReport.forEach()
-
Ruft
callbackFn
einmal für jedes imRTCStatsReport
-Objekt vorhandene Schlüssel-Wert-Paar in Einfügungsreihenfolge auf. Wenn einthisArg
-Parameter anforEach
übergeben wird, wird er alsthis
-Wert für jeden Rückruf verwendet. RTCStatsReport.get()
-
Gibt das Statistik-Wörterbuch zurück, das mit der übergebenen
id
verknüpft ist, oderundefined
, wenn keine vorhanden ist. RTCStatsReport.has()
-
Gibt einen booleschen Wert zurück, der angibt, ob das
RTCStatsReport
ein Statistik-Wörterbuch enthält, das mit der angegebenenid
verknüpft ist. RTCStatsReport.keys()
-
Gibt ein neues Iterator-Objekt zurück, das die Schlüssel (IDs) für jedes Element im
RTCStatsReport
-Objekt in Einfügungsreihenfolge enthält. RTCStatsReport.values()
-
Gibt ein neues Iterator-Objekt zurück, das die Werte (Statistik-Objekte) für jedes Element im
RTCStatsReport
-Objekt in Einfügungsreihenfolge enthält. RTCStatsReport[Symbol.iterator]()
-
Gibt ein neues Iterator-Objekt zurück, das ein zweigliedriges Array von
[id, statistic-dictionary]
für jedes Element imRTCStatsReport
-Objekt in Einfügungsreihenfolge enthält.
Beschreibung
Ein Promise
, der sich in ein RTCStatsReport
auflöst, wird von den Methoden RTCRtpReceiver.getStats()
, RTCRtpSender.getStats()
und RTCPeerConnection.getStats()
zurückgegeben.
Das Aufrufen von getStats()
bei einem RTCPeerConnection
ermöglicht es Ihnen, anzugeben, ob Sie ausgehende Statistiken, eingehende Statistiken oder Statistiken für die gesamte Verbindung erhalten möchten.
Die Versionen getStats()
von RTCRtpReceiver
und RTCRtpSender
geben jeweils nur 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 das WebRTC-Objekt eindeutig identifizieren, das zur Erstellung eines bestimmten Satzes von Statistiken überprüft wurde, und der Wert ein Wörterbuchobjekt ist, das diese Statistiken enthält.
Ein RTCStatsReport
kann wie ein schreibgeschütztes Map
durchlaufen und verwendet werden.
Der Bericht kann viele verschiedene Kategorien von Statistiken enthalten, einschließlich ein- und ausgehender Statistiken sowohl für die aktuellen als auch für die Remote-Enden der Peer-Verbindung, Informationen über Codecs, Zertifikate und verwendete Medien und so weiter.
Jede Kategorie von Statistiken wird in einem anderen Typ von Statistik-Wörterbuchobjekt bereitgestellt, das anhand seiner type
-Eigenschaft identifiziert werden kann.
Allgemeine Instanz-Eigenschaften
Alle Wörterbuchtypen haben die folgenden Eigenschaften:
id
-
Ein String, der das Objekt eindeutig identifiziert, das überwacht wurde, um den Satz von Statistiken zu erstellen. Dieser Wert bleibt über Berichte hinweg für (mindestens) die Lebensdauer der Verbindung bestehen. Beachten Sie jedoch, dass sich die ID für einige Statistiken zwischen Browsern und für nachfolgende Verbindungen, selbst zum gleichen Peer, ändern kann.
timestamp
-
Ein hochauflösendes Zeitstempelobjekt (
DOMHighResTimeStamp
), das Zeit angibt, zu der die Probe entnommen wurde. Viele gemeldete Statistiken sind kumulative Werte; der Zeitstempel ermöglicht es, Raten und Durchschnitte zwischen beliebigen zwei Berichten mit jeder gewünschten Berichtsrate zu berechnen. type
-
Ein String mit einem Wert, der den Typ der Statistiken angibt, die das Objekt enthält, wie
candidate-pair
,inbound-rtp
,certificate
und so weiter. Die Statistik-Typen und deren zugehörige Objekte sind unten aufgelistet.
Benutzer iterieren typischerweise ein RTCStatsReport
, indem sie eine forEach()
- oder for...of
-Schleife verwenden und die interessierenden Statistiken mit der type
-Eigenschaft auswählen.
Sobald ein bestimmtes Statistikobjekt mit seinem 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 Statistik-Typen
Die Statistik-type
-Werte und deren entsprechende Wörterbücher sind unten aufgeführt.
type | Dictionary | Beschreibung |
---|---|---|
candidate-pair |
RTCIceCandidatePairStats |
Statistiken, die den Wechsel von einem RTCIceTransport zu einem anderen beschreiben, wie z.B. während eines ICE Neustarts. |
certificate |
RTCCertificateStats |
Statistiken über ein Zertifikat, das von einem RTCIceTransport verwendet wird. |
codec |
RTCCodecStats |
Statistiken über einen spezifischen Codec, der von den von dieser Verbindung gesendeten oder empfangenen Streams verwendet wird. |
data-channel |
RTCDataChannelStats |
Statistiken, die sich auf einen RTCDataChannel in der Verbindung beziehen. |
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 RTCIceTransport der Verbindung verbunden ist. |
media-source |
RTCAudioSourceStats oder RTCVideoSourceStats |
Statistiken über die Medien, die von der MediaStreamTrack erzeugt werden, die an einen RTP-Sender angehängt ist. Das Wörterbuch, dem dieser Schlüssel zugeordnet ist, hängt von der kind der Spur 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 Remote-ICE-Kandidaten, der mit den RTCIceTransport der Verbindung verbunden ist. |
remote-inbound-rtp |
RTCRemoteInboundRtpStreamStats |
Statistiken, die den Zustand des eingehenden Datenstroms aus der Perspektive des Remote-Peers beschreiben. |
remote-outbound-rtp |
RTCRemoteOutboundRtpStreamStats |
Statistiken, die den Zustand des ausgehenden Datenstroms aus der Perspektive des Remote-Peers beschreiben. |
transport |
RTCTransportStats |
Statistiken über einen Transport, der von der Verbindung verwendet wird. |
Beispiele
Bericht von einer RTCPeerConnection mithilfe der forEach-Schleife iterieren
Dieses Beispiel zeigt, wie Sie videobezogene Statistiken für den lokalen RTCRtpReceiver
, der für den Empfang von gestreamten Medien verantwortlich ist, protokollieren könnten.
Angenommen, Sie haben eine Variable myPeerConnection
, die eine Instanz von RTCPeerConnection
ist, dann verwendet der Code await
, um auf den Statistikbericht zu warten, und iteriert ihn dann unter Verwendung von RTCStatsReport.forEach()
.
Er filtert dann die Wörterbücher für nur die Berichte, die den type
von inbound-rtp
und kind
von video
haben.
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
durchlaufen könnten.
Der Code folgt einem ähnlichen Muster wie das vorherige Beispiel, iteriert jedoch mit einer for...of
-Schleife über die RTCStatsReport.values()
und filtert den type
von outbound-rtp
.
Es wird vorausgesetzt, dass Sie bereits ein RTCRtpSender
-Objekt namens "sender" haben.
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}: ${report[statName]}`);
});
}
Spezifikationen
Specification |
---|
WebRTC: Real-Time Communication in Browsers # rtcstatsreport-object |
Browser-Kompatibilität
BCD tables only load in the browser