Skip to content

Under the hood

How the webcam test works

The webcam test is a page of client-side JavaScript talking directly to your browser's camera API. There's no account, no app to install, and no server processing your video. This page explains what happens when you click each button, in plain terms, so you know exactly what you're allowing when your browser asks for camera access.

The permission prompt

Every browser gates camera access behind a permission prompt the first time a page asks for it, using the getUserMedia() API. Clicking "Start webcam test" on the webcam test page triggers that request. If you click Allow, the browser hands this page a live video stream object; if you click Block, the request fails immediately and the page shows a plain-language explanation instead of a blank screen.

That permission is scoped to this exact site and remembered by your browser, not by this page. Clearing it, revoking it, or resetting it later is done in your browser's own site settings, not on the webcam test page itself.

What happens after you click Allow

Once permission is granted, three things happen almost instantly.

  1. The video stream is attached directly to an on-page video element, which is what produces the live preview.
  2. The camera's current settings (width, height, and its self-reported frame rate) are read from the stream's video track and shown as the "resolution" and "reported frame rate" numbers.
  3. A frame counter starts running in the background to measure the frame rate you're actually receiving, shown as "measured frame rate".

How the measured frame rate is calculated

Reading a camera's self-reported frame rate is easy: it's just a number the driver publishes and browsers can query directly. Measuring what's actually arriving is more useful, because the reported number is a ceiling, not a live reading.

In Chrome, Edge, and Safari, this page uses the browser's video frame callback API, which fires once per decoded video frame with an accurate timestamp. The page keeps a rolling one-second window of those timestamps and counts how many landed in the last second, updating on every new frame. In Firefox, which doesn't expose that callback yet, the page instead watches the video's playback position on every animation frame and counts how often it actually changes, which gives an equivalent, if very slightly less precise, result. Either way, what you see is frames that were genuinely decoded and displayed, not a number copied from a spec sheet.

The camera picker

If your device has more than one camera, a dropdown appears above the preview once permission is granted (the list of camera names is only available after permission, for privacy reasons built into the browser itself, not a choice this page makes). Choosing a different camera stops the current stream and starts a fresh request for the one you picked, so the resolution and frame rate numbers always reflect the camera actually selected. For the full breakdown of what this page does and doesn't do with that stream, see the privacy policy.

Mirror, fullscreen, and take photo

These three controls only change what you see or save locally; none of them involve a network request.

The copy report button

Clicking "Copy report" builds a short plain-text summary (camera name, resolution, measured and reported frame rate, browser, and a timestamp) and copies it to your clipboard using the browser's Clipboard API, with an older-browser fallback if that API isn't available. It's meant for pasting into a support chat, an email to IT, or a bug report, so you don't have to retype numbers off the screen by hand. Nothing is sent anywhere automatically; the text only goes wherever you paste it yourself.

Stopping the test

Clicking "Stop webcam" calls stop() on every track in the camera stream, which turns off the camera hardware indicator immediately, the same one your operating system shows whenever any app is using the camera. Closing the browser tab does the same thing automatically, even if you forget to click Stop.

Frequently Asked Questions

Does this page use a webcam plugin or Flash?
No. It uses standard, built-in browser JavaScript APIs (getUserMedia and the Canvas API). No plugin, extension, or third-party player is involved.
Why does the camera list stay empty until I allow access?
Browsers hide camera and microphone device names from any site until that site has been granted permission at least once, specifically to stop sites from fingerprinting your hardware without your knowledge.
Is the measured frame rate ever wrong?
It reflects exactly what your browser decoded in the last second, so it can dip briefly during a genuinely difficult moment, like the first second after switching cameras, but it isn't a guess or an average pulled from a spec sheet.
Can this page tell if my internet connection is the problem?
No, and it isn't trying to. Everything measured here happens before any video would be sent to another person, so it isolates camera and driver issues from your internet connection. If the test looks great here but a real call still looks bad, the internet connection or the call app is the more likely cause; see the webcam troubleshooting guide for what to check next.

Try it yourself

Run the live webcam test and see your own resolution and frame rate.

Open the webcam test

Free. No sign-up.