Blog

WebRTC API: How to collect powerful communication statistics

Web Development

WebRTC API: How to collect powerful communication statistics

WebRTC API

In this blog, we’ll delve into the world of WebRTC statistics, uncovering the key steps to collect and analyze API metrics for flawless real-time communication. Discover how measuring network performance, audio/video quality, and other crucial indicators can empower you to optimize WebRTC applications and deliver exceptional user experiences.

WebRTC, short for Web Real-Time Communication, is a collection of web technologies and programming interfaces that facilitate real-time communication between web browsers or other applications. Its purpose is to enable peer-to-peer audio, video, and data sharing without users needing to install additional software or plugins.

One of the significant components of WebRTC is the getStats API. This particular API is crucial in providing developers with real-time statistics regarding an ongoing WebRTC session. Its primary objective is to gather pertinent information about the performance and quality of the media streams transmitted during a WebRTC session.

When utilizing the getStats API, developers gain access to a wide range of statistics related to the WebRTC session. These statistics include network information, audio and video quality metrics, transmission and congestion data, and more. By having access to these statistics, developers can effectively monitor the health and performance of the connection, diagnose potential issues, and optimize the overall user experience.

To use the getStats API, developers need to call the getStats() method on the RTCPeerConnection object. This method returns a promise, a programming construct representing the eventual completion of an asynchronous operation. Once the promise is resolved, it provides an RTCStatsReport object that contains the collected statistics. This report is a collection of RTCStats objects, where each object represents a specific metric or measurement associated with the WebRTC session. 

Here are some common parameters that you might find in the RTCStats objects: 

1. ID: A unique identifier for the statistic.

2. Type: The type of statistic, such as “inbound-rtp,” “outbound-rtp,” “candidate-pair,” etc.

3. Timestamp: The timestamp when the statistic was collected.

4. Bytes sent/received: The number of bytes sent/received by a specific media track or transport.

5. Packet sent/received: The number of packets sent/received.

6. Roundtrip time: The media stream’s roundtrip time (RTT).

7. Jitter: The amount of jitter experienced by the media stream.

8. FramesPerSecond/framesSent/framesReceived: Information about video frames, such as frame rate and counts.

9. CandidateType: The type of ICE candidate (host, server reflexive, relayed, etc.).

10. LocalCandidateId/remoteCandidateId: Identifiers for the local and remote ICE candidates involved in a connection.

11. TransportID: Identifier for the transport being used.

The RTCStats objects encompass a variety of properties that offer valuable insights into the performance of the WebRTC session. These properties include packet loss, latency, bandwidth usage, audio and video codecs being used, frame rate, resolution, and other relevant details. Developers can extract and analyze these properties to better understand the session’s performance and make informed decisions or take appropriate actions based on the collected data.

Several parameters are particularly noteworthy when examining the network information available through the RTCStats object. These parameters include average latency, packet loss percentage, latency, jitter, and more.

Latency refers to when a data packet travels from its source to its destination. It is typically measured in milliseconds (ms). Higher latency values can indicate longer delays in data transmission, affecting the real-time nature of communication.

Packet loss occurs when one or more data packets fail to reach their intended destination during transmission over a network. It is usually expressed as a percentage, representing the proportion of lost packets compared to the total number of packets sent. Packet loss can disrupt the seamless flow of audio or video streams, leading to a degraded user experience.

Jitter refers to the variation in latency among the packets traveling between two systems in a network. It measures the inconsistency or irregularity in packet arrival times. Jitter can cause audio or video playback disruptions and may require buffering or other compensation mechanisms to mitigate its effects.

Another important parameter is the Mean Opinion Score (MOS), an industry-standard call quality measure. It is expressed on a scale of one to five, with higher values indicating better-perceived call quality. The MOS value is often utilized to assess audio quality during a WebRTC session, with a range of 4 to 5 generally considered good.

In summary, the getStats API in WebRTC provides developers with invaluable real-time statistics to monitor and optimize their WebRTC-based applications. This API allows developers to gather essential information about the ongoing session, including network parameters such as latency, packet loss, jitter, and audio quality. This data empowers developers to enhance the quality and reliability of real-time communication, ultimately improving the overall user experience.

Code snippet:

// Assuming you have a WebRTC peer connection object named 'peerConnection.'
// Function to get stats and handle the response

function getStatsAndHandleResponse() {

  peerConnection.getStats().then(function(statsReport) {

    // Process the stats report

    status report.forEach(function(stat) {

      console.log('ID:', stat.id);

      console.log('Type:', stat.type);

      console.log('Timestamp:', stat.timestamp);

      // Access other parameters based on your requirements

      console.log('Bytes Sent:', stat.bytes sent);

      console.log('Bytes Received:', stat.bytes received);

      console.log('Packets Sent:', stat.packets sent);

      console.log('Packets Received:', stat.packets received);

      // ...

    });

  }).catch(function(error) {

    console.error('Error retrieving stats:', error);

  });

}

// Call the function to get stats and handle the response

getStatsAndHandleResponse();

Architecture diagram

webRTC_API_Architecture _Diagram

In conclusion, WebRTC statistics through the getStats API is paramount in optimizing real-time communication experiences. By collecting and analyzing crucial metrics such as network performance, audio/video quality, and other vital indicators, developers can fine-tune WebRTC applications to deliver exceptional user experiences. The ability to monitor factors like latency, packet loss, jitter, and audio quality empowers developers to identify and resolve issues, ensuring smooth and reliable communication. By leveraging the insights the getStats API provides, developers can enhance the overall quality, reliability, and performance of WebRTC-based applications, ultimately enriching the user experience.