Webcam Test
Check your camera works, and find out what resolution and frame rate you are really getting.
Phones only.
Snapshots follow this setting.
Press start to open your camera
- Delivered
- —
- Requested
- —
- Measured rate
- —
- Aspect
- —
Everything here runs on your device. Nothing you enter is uploaded or stored.
Press start and this shows a live preview alongside what your camera is genuinely delivering: the real resolution, the measured frame rate, the aspect ratio, and the device the browser actually opened. You can take a snapshot, flip the image, and switch between cameras.
How to use it
- Press Start and allow camera access. The video never leaves the page.
- Compare delivered against requested. If they differ, the note explains what your camera substituted.
- Give the frame rate a few seconds to settle before reading it.
- Toggle Mirror if you want the preview to behave like a mirror. Snapshots follow the toggle.
- Press Snapshot to download the current frame as a PNG.
What you ask for is not what you get
This is the part a preview-only camera test cannot tell you, and it explains a surprising number of “my webcam looks bad” complaints.
When a page requests a camera, it supplies constraints — width, height, frame rate. The critical detail is that the common form of those constraints is ideal, which means preference. If the camera cannot satisfy them, getUserMedia does not fail. It succeeds, picks the closest mode it has, and returns a stream. Nothing in the API surfaces the fact that a substitution happened. You asked for 1920×1080 and you have a working video element, so everything looks fine.
Except it is not fine, and there are two distinct ways it goes wrong.
The first is a straightforward downgrade. Ask a 720p sensor for 1080p and you get 1280×720. Your layout was built for a 16:9 frame at 1080p, and it still is 16:9, so nothing looks broken — you simply have 44% fewer pixels than you designed for. Reading the track settings back, which is what this page does, is the only way to know.
The second is worse: some cameras and some virtual camera drivers will upscale to satisfy the request. You ask for 1080p, the driver interpolates its 720p sensor output up to 1920×1080, and reports 1920×1080 as the delivered resolution. It is technically not lying. But the extra pixels contain no extra detail, and you are now encoding and transmitting twice the data for an image that is measurably softer than the native 720p would have been. If your video looks mushy at a high resolution, this is usually why, and the fix is to request the native mode instead.
The frame rate has an equivalent problem, and it is why this page measures rather than reports. The track settings expose a frameRate figure, and it is the camera’s nominal capability, not its current output. A camera that claims 30fps will deliver 30fps in good light and quietly drop to 15 or even 7.5 in a dim room, because exposure time and frame interval are the same constraint — you cannot hold the shutter open for a thirtieth of a second and also produce thirty frames a second. The camera makes that trade automatically and reports nothing.
Measuring it properly needs requestVideoFrameCallback, which fires once per decoded frame rather than once per screen repaint. Where that is unavailable the fallback uses the animation frame loop, which is bounded by your monitor’s refresh rate and therefore cannot see above roughly 60fps. The page states which method it used.
What it does not do
It does not record video, so there is nothing to save beyond a still frame. It cannot diagnose a driver fault, change your camera’s exposure settings, or fix poor lighting. Torch control exists only on cameras that expose it, which in practice means some Android rear cameras and almost nothing else. Device labels stay blank until permission is granted, which is a browser privacy protection rather than a bug. Switching tabs stops the stream deliberately, so the camera light goes out and other applications can use it.
Nothing is uploaded. No frame is transmitted, and the snapshot is generated and downloaded entirely on your device.
Common resolutions
| Name | Pixels | Aspect | Notes |
|---|---|---|---|
| VGA | 640 × 480 | 4:3 | Ancient, still the fallback on cheap hardware |
| 480p | 854 × 480 | 16:9 | Low bandwidth video calls |
| 720p | 1280 × 720 | 16:9 | The most common laptop webcam sensor |
| 1080p | 1920 × 1080 | 16:9 | Standard for external webcams |
| 1440p | 2560 × 1440 | 16:9 | Higher-end external cameras |
| 4K | 3840 × 2160 | 16:9 | Rare, and heavy to encode |
Diagnosing a camera problem
| Symptom | Usual cause |
|---|---|
| No permission prompt | Site permission already blocked in browser settings |
| Black preview, light on | Privacy shutter closed, or lens covered |
| Black preview, no light | Another application holds the device |
| Delivered below requested | Camera has no such mode; it substituted |
| Frame rate far below claimed | Not enough light for the exposure time |
| Soft image at high resolution | Driver upscaling a smaller native sensor |
Questions
Why is my resolution lower than what I asked for?
Because getUserMedia treats resolution as a preference, not a demand. Ask a 720p camera for 1080p and it succeeds while quietly handing back 720p. This page reads the track settings back so the substitution is visible instead of silent.
Why does my 30fps camera measure 15fps?
Almost always the lighting. In dim conditions a camera lengthens its exposure time to gather more light, and it cannot expose for 1/30th of a second and deliver 30 frames per second at the same time. Add light and the rate recovers.
Is the measured frame rate reliable?
Where the browser supports requestVideoFrameCallback, yes, because it fires once per decoded frame. Without it the measurement falls back to the repaint loop, which is capped at your display refresh rate and so cannot report above about 60fps.
My camera works in Zoom but not here. Why?
Usually a site permission, or another application holding the device. On Windows a camera can only be opened by one app at a time in many configurations, so close the conferencing software first.
Last updated