RTCStatsReport
Baseline
Weitgehend verfügbar
*
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Januar 2020 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Die RTCStatsReport-Schnittstelle der WebRTC API stellt einen Statistikbericht für eine RTCPeerConnection, einen RTCRtpSender oder einen RTCRtpReceiver bereit.
Eine RTCStatsReport-Instanz ist ein schreibgeschütztes, Map-ähnliches Objekt. Jeder Schlüssel ist ein Bezeichner für ein Objekt, zu dem Statistiken erfasst werden. Der zugehörige Wert ist ein Dictionary-Objekt, das diese Statistiken enthält.
Instanzeigenschaften
RTCStatsReport.size-
Gibt die Anzahl der Einträge im
RTCStatsReport-Objekt zurück.
Gemeinsame Instanzeigenschaften
Alle Dictionary-Typen haben die folgenden Eigenschaften:
id-
Ein String, der das Objekt eindeutig identifiziert, das zur Erstellung der Statistiken überwacht wurde. Dieser Wert bleibt über mehrere Berichte hinweg mindestens für die Lebensdauer der Verbindung bestehen. Beachten Sie jedoch, dass die ID bei manchen Statistiken je nach Browser und bei späteren Verbindungen variieren kann, selbst wenn die Verbindung zum selben Peer besteht.
timestamp-
Ein hochauflösender Zeitstempel (
DOMHighResTimeStamp), der angibt, wann die Stichprobe erfasst wurde. Viele der gemeldeten Statistiken sind kumulative Werte. Anhand des Zeitstempels lassen sich Raten und Durchschnittswerte zwischen zwei beliebigen Berichten bei jeder gewünschten Berichtsfrequenz berechnen. type-
Ein String, dessen Wert angibt, welche Art von Statistiken das Objekt enthält, beispielsweise
candidate-pair,inbound-rtpodercertificate. Die Statistiktypen und die zugehörigen Objekte sind unten aufgeführt.
Üblicherweise durchlaufen Sie einen RTCStatsReport mit forEach() oder einer for...of-Schleife und wählen die gewünschten Statistiken anhand der Eigenschaft type aus.
Nachdem Sie ein Statistikobjekt anhand seines type identifiziert haben, können Sie dessen Eigenschaft id bei einem späteren Aufruf von get() verwenden, um den Bericht zur selben Statistik zu einem anderen Zeitpunkt abzurufen.
Anhand des Zeitstempels lassen sich Durchschnittswerte für Statistiken berechnen, die sich über die Lebensdauer einer Verbindung aufsummieren.
Instanzmethoden
RTCStatsReport.entries()-
Gibt ein neues Iterator-Objekt zurück, das für jeden Eintrag im
RTCStatsReport-Objekt ein Array mit zwei Elementen der Form[id, statistic-dictionary]enthält, und zwar in der Reihenfolge, in der die Einträge eingefügt wurden. RTCStatsReport.forEach()-
Ruft
callbackFneinmal für jedes Schlüssel-Wert-Paar imRTCStatsReport-Objekt auf, und zwar in der Reihenfolge, in der die Einträge eingefügt wurden. Wenn SieforEacheinen ParameterthisArgübergeben, wird dieser bei jedem Callback alsthis-Wert verwendet. RTCStatsReport.get()-
Gibt das der übergebenen
idzugeordnete Statistik-Dictionary zurück oderundefined, wenn keines vorhanden ist. RTCStatsReport.has()-
Gibt einen booleschen Wert zurück, der angibt, ob
RTCStatsReportein Statistik-Dictionary enthält, das der angegebenenidzugeordnet ist. RTCStatsReport.keys()-
Gibt ein neues Iterator-Objekt zurück, das die Schlüssel (IDs) aller Einträge im
RTCStatsReport-Objekt enthält, und zwar in der Reihenfolge, in der die Einträge eingefügt wurden. RTCStatsReport.values()-
Gibt ein neues Iterator-Objekt zurück, das die Werte (Statistikobjekte) aller Einträge im
RTCStatsReport-Objekt enthält, und zwar in der Reihenfolge, in der die Einträge eingefügt wurden. RTCStatsReport[Symbol.iterator]()-
Gibt ein neues Iterator-Objekt zurück, das für jeden Eintrag im
RTCStatsReport-Objekt ein Array mit zwei Elementen der Form[id, statistic-dictionary]enthält, und zwar in der Reihenfolge, in der die Einträge eingefügt wurden.
Beschreibung
Die Methoden RTCRtpReceiver.getStats(), RTCRtpSender.getStats() und RTCPeerConnection.getStats() geben ein Promise zurück, das mit einem RTCStatsReport erfüllt wird.
Beim Aufruf von getStats() für eine RTCPeerConnection können Sie festlegen, ob Sie Statistiken zu ausgehenden Daten, eingehenden Daten oder zur gesamten Verbindung abrufen möchten.
Die getStats()-Varianten von RTCRtpReceiver und RTCRtpSender geben dagegen nur Statistiken zu eingehenden beziehungsweise ausgehenden Daten zurück.
Der Statistikbericht ist ein schreibgeschütztes, Map-ähnliches Objekt: ein geordnetes Dictionary, dessen Schlüssel id-Strings sind, die das WebRTC-Objekt eindeutig identifizieren, das für eine bestimmte Statistik untersucht wurde. Der jeweilige Wert ist ein Dictionary-Objekt mit diesen Statistiken.
Sie können einen RTCStatsReport auf dieselbe Weise wie eine schreibgeschützte Map durchlaufen und verwenden.
Der Bericht kann zahlreiche Kategorien von Statistiken enthalten, darunter Statistiken zu eingehenden und ausgehenden Daten sowohl für die lokale als auch für die entfernte Seite der Peer-Verbindung sowie Informationen zu verwendeten Codecs, Zertifikaten und Medien.
Jede Statistikkategorie wird durch einen eigenen Typ von Statistik-Dictionary-Objekt dargestellt, den Sie anhand seiner Eigenschaft type identifizieren können.
Statistiktypen
Die Werte von type und die zugehörigen Dictionary-Typen sind unten aufgeführt.
| type | Dictionary | Beschreibung |
|---|---|---|
candidate-pair |
RTCIceCandidatePairStats |
Statistiken, die den Wechsel von einem RTCIceTransport zu einem anderen beschreiben, beispielsweise bei einem ICE-Neustart. |
certificate |
RTCCertificateStats |
Statistiken zu einem Zertifikat, das von einem RTCIceTransport verwendet wird. |
codec |
RTCCodecStats |
Statistiken zu einem bestimmten Codec, der von über diese Verbindung gesendeten oder empfangenen Streams verwendet wird. |
data-channel |
RTCDataChannelStats |
Statistiken zu einem RTCDataChannel der Verbindung. |
inbound-rtp |
RTCInboundRtpStreamStats |
Statistiken zum Zustand eines der eingehenden Datenstreams der Verbindung. |
local-candidate |
RTCIceCandidateStats |
Statistiken zu einem lokalen ICE-Kandidaten, der einem RTCIceTransport der Verbindung zugeordnet ist. |
media-source |
RTCAudioSourceStats oder RTCVideoSourceStats |
Statistiken zu den Medien, die vom MediaStreamTrack eines RTP-Senders erzeugt werden. Welchem Dictionary dieser Schlüssel zugeordnet ist, hängt von der Eigenschaft kind des Tracks ab. |
outbound-rtp |
RTCOutboundRtpStreamStats |
Statistiken zum Zustand eines der ausgehenden Datenstreams der Verbindung. |
peer-connection |
RTCPeerConnectionStats |
Statistiken zum Zustand der RTCPeerConnection. |
remote-candidate |
RTCIceCandidateStats |
Statistiken zu einem entfernten ICE-Kandidaten, der einem RTCIceTransport der Verbindung zugeordnet ist. |
remote-inbound-rtp |
RTCRemoteInboundRtpStreamStats |
Statistiken zum Zustand des eingehenden Datenstreams aus Sicht des entfernten Peers. |
remote-outbound-rtp |
RTCRemoteOutboundRtpStreamStats |
Statistiken zum Zustand des ausgehenden Datenstreams aus Sicht des entfernten Peers. |
transport |
RTCTransportStats |
Statistiken zu einem von der Verbindung verwendeten Transport. |
Beispiele
>Bericht einer RTCPeerConnection mit einer forEach-Schleife durchlaufen
Dieses Beispiel zeigt, wie Sie videobezogene Statistiken für den lokalen RTCRtpReceiver protokollieren können, der für den Empfang gestreamter Medien zuständig ist.
Die Variable myPeerConnection enthält eine Instanz von RTCPeerConnection. Der Code wartet mit await auf den Statistikbericht und durchläuft ihn anschließend mit RTCStatsReport.forEach().
Dabei berücksichtigt er nur Dictionary-Objekte, deren Berichte den type-Wert inbound-rtp und den kind-Wert 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 eines RTCRtpSender mit einer for...of-Schleife durchlaufen
Dieses Beispiel zeigt, wie Sie die Statistiken zu ausgehenden Daten eines RTCRtpSender durchlaufen können.
Der Code folgt einem ähnlichen Muster wie im vorherigen Beispiel, verwendet jedoch eine for...of-Schleife über RTCStatsReport.values() und berücksichtigt nur Einträge mit dem type-Wert outbound-rtp.
Dabei wird vorausgesetzt, dass bereits ein RTCRtpSender-Objekt namens „sender“ vorhanden ist.
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
| Spezifikation |
|---|
| WebRTC: Real-Time Communication in Browsers> # rtcstatsreport-object> |