Signatur
Beschreibung
RTCOutboundRtpStreamStats ist ein Wörterbuch (Dictionary), keine Klasse. Man instanziiert es also nicht selbst. Solche Objekte stecken als Einträge in der RTCStatsReport-Map, die RTCPeerConnection.getStats() oder RTCRtpSender.getStats() liefert. Du erkennst sie an type === "outbound-rtp".
Jeder Eintrag beschreibt genau einen ausgehenden RTP-Stream mit eigener ssrc. Bei Simulcast gibt es für jede Schicht einen eigenen Eintrag mit eigenem rid. Die meisten Werte sind kumulative Zähler seit Beginn des Streams, zum Beispiel bytesSent, packetsSent oder framesEncoded. Raten wie Bitrate oder Bildrate musst du selbst berechnen: Nimm die Differenz zweier Messungen und teile sie durch die Differenz der zugehörigen timestamp-Werte (in Millisekunden).
Typische Anwendungsfälle:
- Qualitätsanzeigen in Videokonferenz-Apps (Auflösung, fps, Bitrate)
- CPU- oder Bandbreiten-Engpässe über
qualityLimitationReasonundqualityLimitationDurationsfinden - Paketverlust und Round-Trip-Zeit über den verknüpften
remote-inbound-rtp-Eintrag überwachen (remoteId) - Telemetriedaten für die Fehlersuche sammeln
Über Verweis-IDs wie codecId, transportId, mediaSourceId und remoteId findest du weitere Einträge im selben Bericht, etwa den Codec (type: "codec"), den Transport ("transport"), die Medienquelle ("media-source") oder die Rückmeldung der Gegenstelle ("remote-inbound-rtp"). Den Eintrag holst du mit report.get(id).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type / id / timestamp Pflicht | string / string / DOMHighResTimeStamp | Aus RTCStats geerbt. type ist immer "outbound-rtp". timestamp ist der Messzeitpunkt in Millisekunden. |
|
| $ssrc / kind / codecId / transportId Pflicht | number / string / string / string | Aus RTCRtpStreamStats geerbt: die SSRC-Kennung, "audio" oder "video" sowie die IDs des Codec- und des Transport-Eintrags. |
|
| $bytesSent / packetsSent | number | Aus RTCSentRtpStreamStats geerbt: Anzahl gesendeter Nutzdaten-Bytes (ohne Header und Padding) und gesendeter RTP-Pakete, jeweils kumulativ. |
|
| $headerBytesSent / retransmittedBytesSent / retransmittedPacketsSent | number | Gesendete RTP-Header-Bytes und Umfang der Neuübertragungen (RTX), jeweils kumulativ. | |
| $mid / rid / mediaSourceId / remoteId | string | Die mid des Transceivers, die Simulcast-Schicht (rid) sowie die IDs des media-source- und des remote-inbound-rtp-Eintrags. |
|
| $active | boolean | Gibt an, ob diese Encoding-Schicht gerade gesendet wird (entspricht RTCRtpEncodingParameters.active). |
|
| $targetBitrate | number | Aktuelle Zielbitrate des Encoders in Bit pro Sekunde. | |
| $frameWidth / frameHeight / framesPerSecond | number | Nur bei Video: Auflösung des zuletzt codierten Frames und Bildrate der letzten Sekunde. | |
| $framesEncoded / framesSent / keyFramesEncoded / hugeFramesSent | number | Nur bei Video: Anzahl codierter bzw. gesendeter Frames, Keyframes und ungewöhnlich großer Frames. | |
| $qpSum / totalEncodeTime / totalEncodedBytesTarget / totalPacketSendDelay | number | Summe der Quantisierungsparameter (niedriger = bessere Qualität), Encode-Zeit in Sekunden, Ziel-Bytes des Encoders und die aufsummierte Sendeverzögerung in Sekunden. | |
| $qualityLimitationReason | "none" | "cpu" | "bandwidth" | "other" | Aktueller Grund, aus dem der Encoder Auflösung oder Bildrate drosselt. | |
| $qualityLimitationDurations / qualityLimitationResolutionChanges | Record<string, number> / number | Gesamtdauer in Sekunden je Drosselungsgrund und Anzahl der Auflösungswechsel, die durch Drosselung ausgelöst wurden. | |
| $nackCount / firCount / pliCount | number | Anzahl empfangener NACK-, FIR- und PLI-Rückmeldungen. Viele PLIs deuten auf Paketverlust beim Empfänger hin. | |
| $encoderImplementation / powerEfficientEncoder / scalabilityMode | string / boolean / string | Name des Encoders (z. B. "libvpx"), ob Hardware-Codierung verwendet wird, und der SVC-Modus (z. B. "L1T3"). Die ersten beiden Werte werden oft nur nach einer Berechtigungsprüfung (Kamera- oder Mikrofonzugriff) offengelegt. |
Rückgabewert
RTCStatsReport (einer Map), das du über getStats() erhältst.