This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
* Some parts of this feature may have varying levels of support.
The RTCInboundRtpStreamStats dictionary of the WebRTC API is used to report statistics related to the receiving end of an RTP stream on the local end of the RTCPeerConnection.
The statistics can be obtained by iterating the RTCStatsReport returned by RTCPeerConnection.getStats() or RTCRtpReceiver.getStats() until you find a report with the type of inbound-rtp.
audioLevelA number that indicates the audio level of the received track. Undefined for video streams.
bytesReceivedA positive integer that indicates the total number of bytes that have been received so far for this media source.
concealedSamplesA positive integer that indicates the number of samples that had to be concealed because they were in packets that were lost or arrived too late to be played out. Undefined for video streams.
concealmentEventsA positive integer that indicates the number of concealment events, where a single event is counted for all consecutive concealed samples following a non-concealed sample. Undefined for video streams.
estimatedPlayoutTimestamp Experimental
A DOMHighResTimeStamp that indicates the estimated playout time of this receiver's track.
fecPacketsDiscardedA positive integer value that indicates the number of RTP Forward Error Correction (FEC) packets which have been received for this source, for which the error correction payload was discarded.
fecPacketsReceivedA positive integer value that indicates the total number of Forward Error Correction (FEC) packets received for this source.
frameHeightA positive integer that indicates the height of the last decoded frame, in pixels. Undefined for audio streams and before the first frame is decoded.
framesAssembledFromMultiplePackets Experimental
A positive integer that indicates the total number of correctly decoded frames for this RTP stream that consist of more than one RTP packet. Undefined for audio streams.
framesDecodedA long integer value that indicates the total number of frames of video which have been correctly decoded so far for this media source. This is the number of frames that would have been rendered if none were dropped. Undefined for audio streams.
framesPerSecondA positive integer that indicates the number of frames decoded in the last second. Undefined for audio streams.
framesReceivedA positive integer that indicates the total number of complete frames received on this RTP stream. Undefined for audio streams.
frameWidthA positive integer that indicates the width of the last decoded frame, in pixels. Undefined for audio streams and before the first frame is decoded.
freezeCount Experimental
A positive integer that indicates the total number of video freezes experienced by this receiver. Undefined for audio streams.
headerBytesReceivedA positive integer that indicates the total number of RTP header and padding bytes received for this SSRC, including retransmissions.
insertedSamplesForDecelerationA positive integer that indicates the number of samples inserted to slow playout from the jitter buffer. Undefined for video streams.
jitterBufferDelayA number that indicates the accumulated time that all audio samples and complete video frames have spent in the jitter buffer, in seconds.
jitterBufferEmittedCountA positive integer indicating the total number of audio samples and/or video frames that have come out of the jitter buffer.
jitterBufferMinimumDelayA number that indicates the minimum delay that might be achieved given only the network characteristics such as jitter and packet loss.
jitterBufferTargetDelayA number that indicates the accumulated target jitter buffer delay.
keyFramesDecodedA positive integer that indicates the total number of key frames successfully decoded for this RTP media stream. Undefined for audio streams.
lastPacketReceivedTimestampA DOMHighResTimeStamp that indicates the time at which the last packet was received for this source. The timestamp property, on the other hand, indicates the time at which the statistics object was generated.
midA string that uniquely identifies the pairing of source and destination of the transceiver's stream. This is the value of the corresponding RTCRtpTransceiver.mid unless that is null, in which case the statistic property is not present.
packetsDiscardedA positive integer that indicates the total number of RTP packets discarded by the jitter buffer due to late or early-arrival.
pauseCount Experimental
A positive integer that indicates the number of video pauses experienced by this receiver. Undefined for audio streams.
playoutId Experimental
A string that identifies the corresponding RTCAudioPlayoutStats for an audio stream. Undefined for video streams.
remoteIdA string that identifies the RTCRemoteOutboundRtpStreamStats object that provides statistics for the remote peer for this same SSRC. This ID is stable across multiple calls to getStats().
removedSamplesForAccelerationA positive integer that indicates the number of samples removed from to speed up playout from the jitter buffer. Undefined for video streams.
silentConcealedSamplesA positive integer that indicates the number of silent concealed samples. Undefined for video streams.
totalAssemblyTime Experimental
A number that indicates the total time spent assembling successfully decoded video frames that were transported in multiple RTP packets, in seconds. Undefined for audio streams.
totalAudioEnergyA number that represents the total audio energy of the received track over the lifetime of the stats object. Undefined for video streams.
totalDecodeTimeA number that indicates the total time spent decoding frames in this stream, in seconds. Undefined for audio streams.
totalFreezesDuration Experimental
A positive number that indicates the total time that the stream has spent frozen, in seconds. Undefined for audio streams.
totalInterFrameDelayA positive number that indicates the total time spent between consecutively rendered frames, recorded just after a frame has been rendered. Undefined for audio streams.
totalPausesDuration Experimental
A positive number that indicates the total time that the stream has spent with paused video, in seconds. Undefined for audio streams.
totalProcessingDelayA positive number that indicates the total time spent processing audio or video samples, in seconds.
totalSamplesDurationA positive number that indicates the total duration of all samples that have been received, in seconds. Undefined for video streams.
totalSamplesReceivedA positive integer that indicates the total number of samples received on this stream. Undefined for video streams.
totalSquaredInterFrameDelayA positive number that indicates the sum of the square of inter-frame delays between consecutively rendered frames, recorded just after a frame has been rendered. Undefined for audio streams.
trackIdentifierA string that provides the id value of the MediaStreamTrack associated with the inbound stream.
These properties are computed locally, and are only available to the device receiving the media stream. Their primary purpose is to examine the error resiliency of the connection, as they provide information about lost packets, lost frames, and how heavily compressed the data is.
nackCountA number that indicates the number of times the receiver notified the sender that one or more RTP packets has been lost by sending a Negative ACKnowledgement (NACK, also called "Generic NACK") packet to the sender. This value is only available to the receiver.
qpSumA positive integer that provides the sum of the QP values for every frame decoded by this RTP receiver to date on the video track described by this statistics object. Valid only for video streams.
These statistics are measured at the receiving end of an RTP stream, regardless of whether it's local or remote.
packetsReceivedThe total number of RTP packets received for this synchronizing source (SSRC), including retransmissions.
packetsLostThe total number of RTP packets lost for this synchronizing source (SSRC). Note that this can be negative, as more packets may be received than the receiver expects.
jitterPacket jitter for this synchronizing source (SSRC), measured in seconds.
codecIdA string that uniquely identifies the object which was inspected to produce the RTCCodecStats object associated with this RTP stream.
kindA string that indicates whether the MediaStreamTrack associated with the stream is an audio or a video track.
ssrcThe 32-bit integer that identifies the source of the RTP packets this object provides. This value is generated per the RFC 3550 specification.
transportIdA string that uniquely identifies the object which was inspected to produce the RTCTransportStats object associated with this RTP stream.
The following properties are common to all WebRTC statistics objects.
idA string that uniquely identifies the object that is being monitored to produce this set of statistics.
timestampA DOMHighResTimeStamp object that indicates the time at which the sample was taken for this statistics object.
typeA string with the value "inbound-rtp", which indicates the type of statistics that the object contains.
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
RTCInboundRtpStreamStats |
79 | 79 | 27 | 66 | 11 | 79 | 27 | 57 | 11 | 12.0 | 79 | 11 |
audioLevel |
86 | 86 | 106 | 72 | 14.1–16.3 | 86 | 106 | 61 | No | 14.0 | 86 | No |
bytesReceived |
79 | 79 | 27 | 66 | 13.1 | 79 | 27 | 57 | 13.4 | 12.0 | 79 | 13.4 |
codecId |
80 | 80 | 98 | 67 | 15.2–15.5 | 80 | 98 | 57 | No | 13.0 | 80 | No |
concealedSamples |
86 | 86 | 104 | 72 | 14.1 | 86 | 104 | 61 | 14.5 | 14.0 | 86 | 14.5 |
concealmentEvents |
86 | 86 | 106 | 72 | 14.1 | 86 | 106 | 61 | 14.5 | 14.0 | 86 | 14.5 |
estimatedPlayoutTimestamp |
No | No | 142 | No | No | No | 142 | No | No | No | No | No |
fecPacketsDiscarded |
81 | 81 | 106 | 68 | 14.1 | 81 | 106 | 58 | 14.5 | 13.0 | 81 | 14.5 |
fecPacketsReceived |
81 | 81 | 106 | 68 | 14.1 | 81 | 106 | 58 | 14.5 | 13.0 | 81 | 14.5 |
frameHeight |
86 | 86 | 101 | 72 | No | 86 | 101 | 61 | No | 14.0 | 86 | No |
frameWidth |
86 | 86 | 101 | 72 | No | 86 | 101 | 61 | No | 14.0 | 86 | No |
framesAssembledFromMultiplePackets |
No | No | 142 | No | No | No | 142 | No | No | No | No | No |
framesDecoded |
79 | 79 | 56 | 66 | 11–15.1 | 79 | 56 | 57 | 11–15.1 | 12.0 | 79 | 11–15.1 |
framesPerSecond |
86 | 86 | 101 | 72 | No | 86 | 101 | 61 | No | 14.0 | 86 | No |
framesReceived |
86 | 86 | 101 | 72 | No | 86 | 101 | 61 | No | 14.0 | 86 | No |
freezeCount |
No | No | 142 | No | No | No | 142 | No | No | No | No | No |
headerBytesReceived |
80 | 80 | 106 | 67 | 14.1 | 80 | 106 | 57 | 14.5 | 13.0 | 80 | 14.5 |
id |
80 | 80 | 72 | 67 | 13.1 | 80 | 79 | 57 | 13.4 | 13.0 | 80 | 13.4 |
insertedSamplesForDeceleration |
86 | 86 | 106 | 72 | 14.1 | 86 | 106 | 61 | 14.5 | 14.0 | 86 | 14.5 |
jitter |
80 | 80 | 27 | 67 | 13.1 | 80 | 27 | 57 | 13.4 | 13.0 | 80 | 13.4 |
jitterBufferDelay |
86 | 86 | 104 | 72 | 14.1 | 86 | 104 | 61 | 14.5 | 14.0 | 86 | 14.5 |
jitterBufferEmittedCount |
86 | 86 | 104 | 72 | 14.1 | 86 | 104 | 61 | 14.5 | 14.0 | 86 | 14.5 |
jitterBufferMinimumDelay |
105 | 105 | 142 | 91 | No | 105 | 142 | 72 | No | 20.0 | 105 | No |
jitterBufferTargetDelay |
105 | 105 | 142 | 91 | No | 105 | 142 | 72 | No | 20.0 | 105 | No |
keyFramesDecoded |
79 | 79 | 142 | 66 | No | 79 | 142 | 57 | No | 12.0 | 79 | No |
kind |
80 | 80 | 63 | 67 | 14 | 80 | 63 | 57 | 14 | 13.0 | 80 | 14 |
lastPacketReceivedTimestamp |
80 | 80 | 106 | 67 | 15.2–15.5 | 80 | 106 | 57 | No | 13.0 | 80 | No |
mid |
105 | 105 | 135 | 91 | 17 | 105 | 135 | 72 | 17 | 20.0 | 105 | 17 |
nackCount |
80 | 80 | 55 | 67 | No | 80 | No | 57 | No | 13.0 | 80 | No |
packetsDiscarded |
94 | 94 | 96 | 80 | 15.4 | 94 | 96 | 66 | 15.4 | 17.0 | 94 | 15.4 |
packetsLost |
80 | 80 | 72 | 67 | 13.1 | 80 | 79 | 57 | 13.4 | 13.0 | 80 | 13.4 |
packetsReceived |
80 | 80 | 72 | 67 | 13.1 | 80 | 79 | 57 | 13.4 | 13.0 | 80 | 13.4 |
pauseCount |
No | No | 142 | No | No | No | 142 | No | No | No | No | No |
playoutId |
111 | 111 | No | 97 | No | 111 | No | 75 | No | 22.0 | 111 | No |
qpSum |
79 | 79 | 106 | 66 | No | 79 | 106 | 57 | No | 12.0 | 79 | No |
remoteId |
91 | 91 | 68 | 77 | No | 91 | 68 | 64 | No | 16.0 | 91 | No |
removedSamplesForAcceleration |
86 | 86 | 106 | 72 | 14.1 | 86 | 106 | 61 | 14.5 | 14.0 | 86 | 14.5 |
silentConcealedSamples |
86 | 86 | 104 | 72 | 14.1 | 86 | 104 | 61 | 14.5 | 14.0 | 86 | 14.5 |
ssrc |
80 | 80 | 27 | 67 | 11 | 80 | 27 | 57 | 11 | 13.0 | 80 | 11 |
timestamp |
80 | 80 | 72 | 67 | 13.1 | 80 | 79 | 57 | 13.4 | 13.0 | 80 | 13.4 |
totalAssemblyTime |
No | No | 142 | No | No | No | 142 | No | No | No | No | No |
totalAudioEnergy |
86 | 86 | 106 | 72 | 14.1 | 86 | 106 | 61 | 14.5 | 14.0 | 86 | 14.5 |
totalDecodeTime |
79 | 79 | 106 | 66 | No | 79 | 106 | 57 | No | 12.0 | 79 | No |
totalFreezesDuration |
No | No | 142 | No | No | No | 142 | No | No | No | No | No |
totalInterFrameDelay |
79 | 79 | 106 | 66 | No | 79 | 106 | 57 | No | 12.0 | 79 | No |
totalPausesDuration |
No | No | 142 | No | No | No | 142 | No | No | No | No | No |
totalProcessingDelay |
103 | 103 | 106 | 89 | No | 103 | 106 | 71 | No | 20.0 | 103 | No |
totalSamplesDuration |
86 | 86 | 106 | 72 | 14.1 | 86 | 106 | 61 | 14.5 | 14.0 | 86 | 14.5 |
totalSamplesReceived |
86 | 86 | 104 | 72 | 14.1 | 86 | 104 | 61 | 14.5 | 14.0 | 86 | 14.5 |
totalSquaredInterFrameDelay |
79 | 79 | 106 | 66 | No | 79 | 106 | 57 | No | 12.0 | 79 | No |
trackIdentifier |
105 | 105 | 111 | 91 | 16.4 | 105 | 111 | 72 | 16.4 | 20.0 | 105 | 16.4 |
transportId |
80 | 80 | No | 67 | 11 | 80 | No | 57 | 11 | 13.0 | 80 | 11 |
type |
80 | 80 | 72 | 67 | 13.1 | 80 | 79 | 57 | 13.4 | 13.0 | 80 | 13.4 |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/RTCInboundRtpStreamStats