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 Schnittstelle RTCStatsReport 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, über das Statistiken erfasst werden. Der zugehörige Wert ist ein Dictionary-Objekt mit diesen Statistiken.
Instanzeigenschaften
RTCStatsReport.size-
Gibt die Anzahl der Einträge im
RTCStatsReport-Objekt zurück.
Instanzmethoden
RTCStatsReport.entries()-
Gibt ein neues Iterator-Objekt zurück, das für jedes Element im
RTCStatsReport-Objekt ein Array mit zwei Einträgen der Form[id, statistic-dictionary]enthält, in der Reihenfolge des Einfügens. RTCStatsReport.forEach()-
Ruft
callbackFneinmal für jedes Schlüssel-Wert-Paar imRTCStatsReport-Objekt auf, in der Reihenfolge des Einfügens. Wenn fürforEacheinthisArg-Parameter angegeben wird, dient er bei jedem Callback alsthis-Wert. 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 das
RTCStatsReport-Objekt ein der angegebenenidzugeordnetes Statistik-Dictionary enthält. RTCStatsReport.keys()-
Gibt ein neues Iterator-Objekt zurück, das die Schlüssel (IDs) für jedes Element im
RTCStatsReport-Objekt enthält, in der Reihenfolge des Einfügens. RTCStatsReport.values()-
Gibt ein neues Iterator-Objekt zurück, das die Werte (Statistikobjekte) für jedes Element im
RTCStatsReport-Objekt enthält, in der Reihenfolge des Einfügens. RTCStatsReport[Symbol.iterator]()-
Gibt ein neues Iterator-Objekt zurück, das für jedes Element im
RTCStatsReport-Objekt ein Array mit zwei Einträgen der Form[id, statistic-dictionary]enthält, in der Reihenfolge des Einfügens.
Beschreibung
Die Methoden RTCRtpReceiver.getStats(), RTCRtpSender.getStats() und RTCPeerConnection.getStats() geben jeweils eine Promise zurück, die mit einem RTCStatsReport erfüllt wird.
Beim Aufruf von getStats() auf einer RTCPeerConnection können Sie angeben, ob Sie Statistiken für ausgehende Daten, eingehende Daten oder die gesamte Verbindung erhalten möchten.
Die Varianten von getStats() für RTCRtpReceiver und RTCRtpSender geben dagegen nur Statistiken für eingehende beziehungsweise ausgehende Daten zurück.
Der Statistikbericht ist ein schreibgeschütztes Map-ähnliches Objekt: ein geordnetes Dictionary, dessen Schlüssel id-Zeichenfolgen sind, die das WebRTC-Objekt eindeutig identifizieren, das zur Erstellung einer bestimmten Statistik untersucht wurde. Der zugehörige Wert ist ein Dictionary-Objekt mit diesen Statistiken.
Ein RTCStatsReport kann durchlaufen und wie eine schreibgeschützte Map verwendet werden.
Der Bericht kann viele verschiedene Kategorien von Statistiken enthalten, darunter Statistiken für eingehende und ausgehende Daten sowohl des lokalen als auch des entfernten Endpunkts der Peer-Verbindung sowie Informationen über verwendete Codecs, Zertifikate und Medien.
Jede Statistikkategorie wird durch einen anderen Typ von Statistik-Dictionary-Objekt bereitgestellt, der anhand seiner Eigenschaft type identifiziert werden kann.
Gemeinsame Instanzeigenschaften
Alle Dictionary-Typen haben die folgenden Eigenschaften:
id-
Eine Zeichenfolge, die 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 erhalten. Beachten Sie jedoch, dass die ID bei manchen Statistiken je nach Browser und bei späteren Verbindungen variieren kann, selbst wenn diese zum selben Peer führen.
timestamp-
Ein hochauflösender Zeitstempel (
DOMHighResTimeStamp), der angibt, wann die Messung erfolgte. Viele der gemeldeten Statistiken sind kumulative Werte. Mithilfe des Zeitstempels lassen sich Raten und Durchschnittswerte zwischen zwei beliebigen Berichten berechnen, unabhängig davon, in welchen Abständen die Berichte erstellt werden. type-
Eine Zeichenfolge, deren Wert den Typ der im Objekt enthaltenen Statistiken angibt, 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 mithilfe der Eigenschaft type die gewünschten Statistiken aus.
Nachdem ein bestimmtes Statistikobjekt anhand seines type identifiziert wurde, können Sie seine Eigenschaft id bei einem späteren Aufruf von get() verwenden, um die entsprechende Statistik zu einem anderen Zeitpunkt abzurufen.
Mithilfe des Zeitstempels lassen sich Durchschnittswerte für Statistiken berechnen, deren Werte sich über die Lebensdauer einer Verbindung aufsummieren.
Die Statistiktypen
Die Werte von type und die zugehörigen Dictionaries sind nachstehend 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, den über diese Verbindung gesendete oder empfangene Streams verwenden. |
data-channel |
RTCDataChannelStats |
Statistiken zu einem RTCDataChannel der Verbindung. |
inbound-rtp |
RTCInboundRtpStreamStats |
Statistiken, die den Zustand eines eingehenden Datenstreams der Verbindung beschreiben. |
local-candidate |
RTCIceCandidateStats |
Statistiken zu einem lokalen ICE-Kandidaten, der einem der RTCIceTransport-Objekte der Verbindung zugeordnet ist. |
media-source |
RTCAudioSourceStats oder RTCVideoSourceStats |
Statistiken zu den Medien, die von dem an einen RTP-Sender gebundenen MediaStreamTrack erzeugt werden. Welchem Dictionary dieser Schlüssel zugeordnet ist, hängt von der Eigenschaft kind des Tracks ab. |
outbound-rtp |
RTCOutboundRtpStreamStats |
Statistiken, die den Zustand eines ausgehenden Datenstreams der Verbindung beschreiben. |
peer-connection |
RTCPeerConnectionStats |
Statistiken, die den Zustand der RTCPeerConnection beschreiben. |
remote-candidate |
RTCIceCandidateStats |
Statistiken zu einem entfernten ICE-Kandidaten, der einem der RTCIceTransport-Objekte der Verbindung zugeordnet ist. |
remote-inbound-rtp |
RTCRemoteInboundRtpStreamStats |
Statistiken, die den Zustand des eingehenden Datenstreams aus Sicht des entfernten Peers beschreiben. |
remote-outbound-rtp |
RTCRemoteOutboundRtpStreamStats |
Statistiken, die den Zustand des ausgehenden Datenstreams aus Sicht des entfernten Peers beschreiben. |
transport |
RTCTransportStats |
Statistiken zu einem von der Verbindung verwendeten Transport. |
Beispiele
>Bericht einer RTCPeerConnection mit forEach 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.
Gegeben ist die Variable myPeerConnection, eine Instanz von RTCPeerConnection. Der Code wartet mit await auf den Statistikbericht und durchläuft ihn anschließend mit RTCStatsReport.forEach().
Dabei filtert er die Dictionaries nach Berichten mit type gleich inbound-rtp und kind gleich video.
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 für ausgehende 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 filtert nach type gleich 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> |