World’s largest virtual agentic engineering & quality conference
Video quality testing explained: how reference scores like VMAF differ from delivery metrics, where the two disagree, and what to measure on real devices.

Sushobhit Dua
Author

Siddhant Sinha
Reviewer
Last Updated on: August 18, 2026
A team ships a new encoding ladder. The dashboard shows the reference score went up on every rendition, the release notes say quality improved, and within a day support is fielding complaints that videos take forever to start on older Android phones.
Both things are true at once. The encode did get better and the viewers did get a worse experience, because the two were never measuring the same thing.
TL;DR
Video quality testing measures two separate things that are easy to confuse: how closely an encoded file resembles its source, scored by reference metrics like VMAF, and what a viewer actually experienced during playback, measured by delivery metrics like start time and rebuffering ratio. A release can improve one while breaking the other.
Video quality testing measures both how good a video looks compared to its source and how reliably it reaches the person watching. Those are different questions with different tooling, and most confusion in this area comes from a team measuring one and making claims about the other.
The delivery half carries the sharper business consequence. In a large-scale study of viewer behaviour presented at the ACM Internet Measurement Conference, Krishnan and Sitaraman found that viewers begin to abandon a video if it does not start within two seconds, and beyond that point every additional second of delay produced roughly a 5.8 percent increase in the abandonment rate, as reported by ScienceDaily.
No encoder setting fixes a two-second startup. That is a delivery problem, and it is invisible to every metric that looks only at pixels.
Keeping the families apart is most of the discipline.
The audio equivalent splits the same way, and the reasoning transfers almost line for line if you also ship voice, as covered in voice quality testing.
Three metrics dominate, and they disagree because they were built to measure different things.
| Metric | What it compares | Where it misleads |
|---|---|---|
| PSNR | Raw signal error between pixels | Punishes changes a viewer cannot see, such as mild noise differences |
| SSIM | Structural similarity, closer to how vision works | Still blind to how distracting an artifact feels in motion |
| VMAF | Several measures fused and tuned against human ratings | Reflects the viewing setup it was trained for, so scores are not universal |
Running one is unglamorous, which is the point: the same clip and the same command give the same number every time, so it belongs in the pipeline rather than in someone's judgement.
# score an encode against its source
ffmpeg -i encoded.mp4 -i source.y4m \
-lavfi libvmaf=log_path=vmaf.json:log_fmt=json \
-f null -
# gate the build on a regression, not on an absolute number
# fail if the mean drops more than 2 points below the last release
python3 compare_vmaf.py vmaf.json baseline.json --max-drop 2Note the second command. Gating on an absolute score invites arguments about what number is good; gating on a regression against the previous release asks a question everyone can answer.
Note: Encode scores run anywhere. Playback verdicts need hardware, and TestMu AI provides 10,000+ real devices with network throttling to measure it. Try it free.
These come from sessions, not files, and they are the ones your viewers actually feel.
| Metric | What it means | Why it matters |
|---|---|---|
| Video start time | Delay between pressing play and the first frame | The metric most directly tied to abandonment |
| Rebuffering ratio | Share of session time spent stalled | A stall mid-scene costs more goodwill than a slightly softer image |
| Playback failure rate | Sessions that never produced a frame | Often codec or DRM rather than bandwidth, and invisible in averages |
| Rendition switches | How often the player changes quality level | Frequent switching signals a ladder fighting the network |
| Time to steady state | How long until the stream settles on a rendition | Long settling shows as visible quality churn at the start |
Measure each under constrained network conditions rather than office wifi, because the failures worth catching happen on a congested mobile connection and never reproduce on a fast one. For the delivery pipeline itself, including adaptive bitrate protocols and DRM, the OTT testing guide goes deeper than this article does.
The disagreements are where the useful bugs live, and there are three common shapes.
Whenever the two families disagree, believe the session. A viewer never sees your reference score.
Set it up in the order that gets you a verdict soonest.
Codec support is where playback most often fails outright rather than degrading, and it varies by browser and by device generation in ways that are easy to assume away.
Before you build a matrix, check what your target browsers actually decode: the current state of AV1 browser support and of HEVC compatible browsers both differ enough between engines to change which renditions you need to ship.
An emulator will not settle any of this. It does not carry the hardware decoder that determines whether a codec plays smoothly, drains the battery, or falls back to software and stutters, so encode scoring can run anywhere while playback verdicts need the real thing.
The delivery half of this work needs hardware and controlled conditions, which is what the real device cloud provides.
Reference scoring stays where it belongs, in your own pipeline next to the encoder, since it needs no hardware and benefits from running on every build.
Write down two numbers this week: the reference-score drop you would refuse to ship, and the start time you would refuse to ship on your slowest supported network. Those two thresholds turn a quality conversation into a gate.
Then measure both on every release, segment before you average, and when the encode score and the session disagree, trust the session. If your product also puts an AI agent on camera, the quality bar shifts again and is covered in video simulation testing.
To measure playback on real hardware, create a free TestMu AI account, which includes 60 minutes of real device and browser testing with no credit card required.
Author
Sushobhit Dua is an Engineering Manager at TestMu AI (formerly LambdaTest), leading SmartUI, the visual regression and visual testing product. He manages the team that builds and ships SmartUI and maintains and cuts releases of the open-source SmartUI CLI. He works primarily in Core Java, Spring Boot, and Gradle, and is an AMCAT Certified Software Engineer. He brings over 10 years of software engineering experience, with earlier work as a Software Engineer at ecare Technology Labs. Sushobhit owns the SmartUI roadmap and the engineering decisions behind it.
Reviewer
Siddhant Sinha is a Lead Member of Technical Staff at TestMu AI architecting Kane CLI, the command-line tool for browser automation from the terminal, where natural-language flows run in a real Chrome browser and return pass or fail with shareable proof. He has spent over three years at TestMu AI (formerly LambdaTest) building scalable platforms that run tests at scale on real Android and iOS devices. His expertise covers platform architecture, large-scale distributed systems, and CLI design, shaped by earlier cloud-native engineering at Semut.io, including building Elasticsearch as a service.
Did you find this page helpful?
More Related Blogs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance