ABR Streaming
Back to blog
Playback & QoE

QoE Metrics That Matter: Startup, Rebuffering, and Beyond

A field guide to the video QoE metrics that predict engagement — startup time, rebuffering ratio, exits-before-start, playback failures — and how to instrument them.

ABR Streaming Team5 min read
QoErebufferingstartup timevideo analyticsCMCDMuxplayback

Quality of Experience (QoE) is the discipline of measuring what your viewers actually feel, not what your encoder produced. A stream can have a beautiful bitrate ladder and still drive people away if it takes six seconds to start or stalls every minute. This guide defines the metrics that correlate most strongly with engagement and revenue, and shows how to collect them.

If you want a hands-on version of everything below, the Play Metrics tool computes these live from a real player, and the Client Metrics API demonstrates a beacon SDK and an ingest dashboard.

The four pillars

Most production QoE systems — Mux Data, NPAW/YOUBORA, Conviva, Bitmovin Analytics — converge on the same core dimensions:

  • Playback failures — the stream never plays at all.
  • Video startup time — how long from intent-to-play to the first frame.
  • Rebuffering — stalls during playback.
  • Video quality — the bitrate/resolution actually delivered.

Everything else is a refinement of these four.

Video Startup Time (VST)

VST is the time between the user pressing play (or the page deciding to autoplay) and the first frame being painted. It's the single most-watched metric because it gates every session — a viewer who never gets a first frame never gets anything.

  • Measure it as a duration, then report the median (p50) and a tail percentile (p95). Averages hide the painful tail.
  • Typical targets: a "good" VST is well under ~1 second for VOD on a healthy connection; multi-second startup correlates sharply with abandonment.
  • Separate join time (manifest + first segments) from player/app overhead so you know whether to blame the CDN or your own code.

Exits Before Video Start (EBVS)

EBVS is the percentage of sessions where the viewer left before the first frame rendered. It pairs with VST: rising startup time pushes EBVS up. Track it as a ratio of abandoned-before-start sessions to total play attempts — it's one of the clearest revenue-linked signals you have.

Playback Failure Rate / Video Start Failures (VSF)

A failure is a session that attempted playback but errored out — a fatal hls.js error, a 403 on a segment, a DRM license denial, a codec the device can't decode. Track:

  • Video Start Failures — failed before the first frame.
  • In-play failures — died mid-session.

Tag each with the underlying error so you can group by CDN, geo, device, and content. A spike isolated to one rendition or one edge node tells you exactly where to look. Watch how fatal errors surface in the player and what hls.js reports.

Rebuffering: count and ratio

Rebuffering is when playback stalls to refill the buffer (excluding the initial load and user-initiated seeks). Two numbers matter:

  • Rebuffer count — how many stalls per session.
  • Rebuffering ratio — total stall time ÷ total watch time, as a percentage. This is the metric to alert on. A common rule of thumb: if concurrent rebuffering climbs above ~5–10%, something is wrong right now.

Rebuffering is the most viscerally negative event in streaming — it hurts engagement more than a modestly lower bitrate, which is why buffer-based ABR algorithms exist (see Adaptive Bitrate).

Quality metrics

Delivered quality is usually summarized as:

  • Average bitrate (time-weighted) and the distribution of time spent on each rung of the ladder.
  • Upscale/peak resolution vs the device viewport.
  • Bitrate switches per session — excessive oscillation looks unstable even if the average is fine.

These connect back to how you built the bitrate ladder and to objective measures like VMAF.

A composite "experience score"

Dashboards full of individual metrics are hard to act on, so most platforms also publish a single 0–100 viewer experience score that blends startup, rebuffering, failures, and quality into one trend line. It's not a substitute for the underlying metrics, but it's a good north star for "is this getting better or worse week over week?" The Play Metrics tool computes a similar heuristic score live so you can see how each penalty moves it.

How to instrument it

You collect QoE from two complementary places:

  1. A client beacon SDK. Attach to the player, listen for playing, waiting, ratechange, error and quality-switch events, maintain a rolling session record (watch time, startup, rebuffer count/duration, bitrate, errors), and POST it to an ingest endpoint on a heartbeat plus on pagehide/visibilitychange (use navigator.sendBeacon so it survives the tab closing). The Client Metrics API tool is a working example of exactly this pattern.
  2. CMCD (Common Media Client Data). The player attaches telemetry — buffer length, measured throughput, object type, requested bitrate — to every segment request, so your CDN logs line up with your client analytics. Inspect what a player actually sends in the CMCD inspector, and see CDN, delivery & caching for why this correlation is so useful.

Slicing the data

A single global number is rarely actionable. The value is in dimensions: break every metric down by CDN, geography, ISP/ASN, device and OS, app version, player version, and content/title. Most "the stream is broken" incidents are actually "the stream is broken on this CDN in this region on this device", and only dimensioned QoE data will show you that.

Takeaways

  • Lead with startup time, rebuffering ratio, and failure rate — they predict abandonment best.
  • Report percentiles (p50/p95), not just averages.
  • Always dimension the data; aggregates hide the real problems.
  • Instrument with a beacon SDK plus CMCD so client and CDN tell the same story.

Try it end to end: watch a stream in Play Metrics, generate a session in the Client Metrics API dashboard, and watch the CMCD keys fly in the CMCD inspector.

Try it yourself

Reading about streaming is one thing — pull apart a real manifest, play a stream, and measure its QoE with the toolkit.

Browse all tools