Welcome to callstats!
🔍 Performance Monitoring
callstats is built atop open APIs and open standards. The callstats team proposed several extensions to RTP Control Protocol (RTCP) that carry statistics from the media receiver to the media sender. These metrics helps monitor the health of the network connection. For example:
- loss, RTT, jitter from the RTCP Receiver Reports (RR),
- bytes and packets sent from the RTCP Sender Report (SR),
- transport bytes and packets received and sent,
- ICE candidates and their respective states.
In 2012, the team also defined the WebRTC getStats() API, which exposes these performance metrics for the media flows directly from the endppoints.
Passive Monitoring
If people are on a call, passive monitoring collects the data from each endpoint, i.e., from the endusers and as many points in the network that handle media, especially middleboxes that reformat (decide to forward the packet or not), transcode (from one codec to another), transcrypt (re-encrypt).
This helps operations and support teams evaluate the call quality, participation and connectivity issues, etc. Read more about integrating callstats.js to monitor the peer connection in callstats.js API Reference
Active Tests
These are tests that run in the background when there are no ongoing calls, mainly to evaluate the network link quality. They can be run just before starting the call -- also known as precall tests. Or at regular intervals in the background, for example, every 10-30 minutes and this gives us a good sense of how the network is performing on average and if there are apps in your home network or in your vicinity that impact your network's performance. In these cases, we do not know which app but by look at the performance data, you will be able to observe the presence of such apps.
Read more about the this in the Smart Connectivity or Pre Call Test APIs.
🚦 Architecture
callstats.io is a complete solution to measure the performance of media flows in a real-time application. We achieve this by capturing performance metrics from each endpoint in a call, especially soft endpoints like desktop or mobile apps. We achieve these by developing client libraries that you incorporate into your desktop and mobile apps.
The client libraries collect local and remote metrics at each endpoint, push these metrics to callstats.io, where each media stream, device, endpoint in a call summarised. The Architecture Figure below show the media flow (black lines), Signalling (blue lines) and telemetry (violet lines) details.

Figure 1. callstats Architecture
🗄 Data Organisation
On the callstats dashboard you can slice and dice the call data or you can delve deeper into a particular call. To quantify the user quality of experience, callstats.io takes into account, the application settings, prevailing network conditions. Furthermore, the algorithm takes in to account the involvement of each participants in the conference to gauge the overall quality of the conference. Lastly, callstats.io aggregates service-level statistics that are important for the operation and maintenance of a WebRTC service.

callstats.io: Summarisation, Aggregation, and Visualisation
🏗Integrating callstats to send data (Ingest)
There are four ways to integrate callstats
- If you are building your webrtc application from scratch, directly using the WebRTC PeerConnection API -- Use callstats.js API Reference
- If you are building atop a CPaaS SDK or using opensource project -- checkout our pre-built integration SDKs -- See callstats' Integrations page. We support all major APIs -- Amazon Connect, Jitsi, react-native-webrtc, SIP.js, jsSIP, Janus, Medooze, Mediasoup, Twilio Programmable Voice, Twilio Programmable Video, Twilio Go, Twilio Flex, Vonage Voice and Video APIs, Voximplant, etc.
- If you are building atop libwebrtc, we have the android and iOS on GitHub.
- Use the Ingest REST API
Updated 2 years ago
What's Next
callstats.js: Integrating with your WebRTC App |
callstats.js API Reference |
callstats.js Precall Test APIs |
Getting data out of callstats (data export) |