Call Quality Metrics
VoIP call quality is quantified by a handful of objective metrics. Reading them correctly tells you whether a complaint is network, codec, hardware, or carrier — and what to fix.
The five core metrics
MOS — Mean Opinion Score
A 1.0 to 5.0 scale, historically derived from human listeners rating call quality. Modern systems calculate it algorithmically from the network metrics below (this is MOS-CQ, "calculated quality").
| MOS | Quality | User experience | |---|---|---| | 4.3 - 5.0 | Excellent | Toll-quality, indistinguishable from PSTN | | 4.0 - 4.3 | Good | Slight imperfections, fully usable | | 3.6 - 4.0 | Fair | Noticeable issues but still usable | | 3.1 - 3.6 | Poor | Annoying, users complain | | 1.0 - 3.1 | Bad | Unintelligible, hang-up territory |
Target: 4.0 or higher. Below 3.6 is a ticket.
R-factor
The E-model output (ITU-T G.107). Ranges 0 to 100. Converts to MOS via a non-linear curve. Above 80 is good. Below 60 is bad.
Why use R-factor instead of MOS? It's additive — you can subtract impairments (codec, jitter, packet loss) cleanly. Carriers and probes often report both.
Jitter
The variation in inter-arrival time of RTP packets. RTP packets should arrive every 20ms (for G.711). Jitter is the standard deviation.
| Jitter | Impact | |---|---| | < 10ms | Imperceptible | | 10 - 30ms | Acceptable, jitter buffer absorbs it | | 30 - 50ms | Audible, choppy audio | | > 50ms | Severe choppy audio, may overflow jitter buffer |
Target: under 30ms. Above 50ms is a network problem upstream.
Packet loss
Percentage of RTP packets that never arrive.
| Loss | Impact (G.711) | Impact (Opus with FEC) | |---|---|---| | < 1% | Imperceptible | Imperceptible | | 1 - 3% | Noticeable clicks | Recoverable | | 3 - 5% | Annoying gaps | Audible artifacts | | > 5% | Severe degradation | Severe degradation |
Target: under 1%. Codec-level FEC (Forward Error Correction) helps Opus survive higher loss, but G.711 has no FEC and degrades fast.
One-way latency (mouth-to-ear)
Time from speaker's mouth to listener's ear.
| Latency | Impact | |---|---| | < 150ms | Imperceptible | | 150 - 300ms | Noticeable, users start talking over each other | | 300 - 400ms | Annoying, conversation feels off | | > 400ms | Severe, half-duplex feel |
Target: under 150ms. Above 300ms is unworkable for real-time conversation.
Where impairments come from
| Symptom | Likely cause | |---|---| | High jitter, low loss | Network congestion at a hop, QoS misconfigured | | High loss, low jitter | Packet drops (firewall, NAT timeout, wireless interference) | | High latency | Geographic distance, satellite hop, routing detour | | Choppy audio one direction only | Asymmetric routing, NAT pinhole closed | | One-way audio | NAT or firewall blocking RTP, SDP misadvertising IP | | Echo | Improper echo cancellation, acoustic feedback, hybrid trunk issue | | Robotic / metallic audio | Codec transcoding (G.729 ↔ G.711), jitter buffer thrash |
Reading the metrics in production
SignalWire CDRs
Each call's CDR includes quality_stats with jitter_ms, packet_loss_pct, rtt_ms, and mos. Pull via the LaML CDR API or the portal CDR export.
SIP RTCP-XR
Endpoints that support RFC 3611 (RTCP Extended Reports) include detailed quality metrics in SIP BYE or in dedicated RTCP-XR messages. Captures by Wireshark or a SIPp probe.
Carrier reports
Tier-1 carriers expose per-call MOS in their portal CDRs. Cross-check against SignalWire CDRs when troubleshooting termination quality.
Targets for production telephony
| Metric | Target | Action threshold | |---|---|---| | MOS | >= 4.0 | < 3.6 | | R-factor | >= 80 | < 60 | | Jitter | < 30ms | > 50ms | | Packet loss | < 1% | > 3% | | One-way latency | < 150ms | > 300ms |
Diagnostic workflow
- Pull CDR quality stats for the affected calls.
- Are the bad calls clustered by time, by route, by codec, or by endpoint?
- Time-clustered → upstream network event, check carrier status.
- Route-clustered → routing change, check egress trunk.
- Codec-clustered → transcoding mismatch, verify SDP.
- Endpoint-clustered → bad LAN, bad Wi-Fi, bad headset.
- Capture RTP at both ends with
tcpdumpor Wireshark. - Run a PCAP through
pcap-analyzerorrtp-analyzerfor jitter and loss histograms.
Related codecs and their MOS ceiling
| Codec | MOS ceiling | Bandwidth | Notes | |---|---|---|---| | G.711 (PCMU/PCMA) | 4.4 | 64 kbps | Toll quality, no compression | | G.722 | 4.5 | 64 kbps | Wideband, sounds clearer than G.711 | | Opus | 4.5+ | 6-510 kbps | Adaptive, FEC, best modern choice | | G.729 | 3.9 | 8 kbps | Low bandwidth, lossy compression | | iLBC | 4.1 | 13-15 kbps | Loss-resilient, deprecated |
References
- ITU-T G.107 — The E-model for transmission planning
- ITU-T P.800 — Methods for subjective determination of transmission quality
- RFC 3611 — RTP Control Protocol Extended Reports (RTCP XR)
- RFC 7005 — RTCP-XR Burst/Gap Discard metric reporting