Camera & Mic Test

Test your webcam and microphone the way video-call apps see them: live preview, device switcher, a real mic level meter and a speaker check.

Video and audio stay inside this page: frames are never drawn to a canvas for upload and no sample is sent anywhere. Stopping or leaving the tab closes every device stream.

Your browser will ask for permission when you press Enable. Nothing starts before that.

Camera—
Actual video size: —Frame rate: —
Microphone—
Input level
Speaker check

The beep plays through whatever your system currently routes audio to — it proves an output device works, but this page cannot confirm which one (it cannot detect a specific headset).

How It Works

Both sections are thin, honest wrappers around navigator.mediaDevices.getUserMedia. The camera button requests a video stream (ideally 1280 × 720) and attaches it directly to a local video element; the microphone button requests an audio stream and routes it through a Web Audio AnalyserNode that measures the loudest deviation from silence in every frame to drive the level bar, its peak-hold marker and the clipping warning. The beep is a 440 Hz oscillator played through the normal output path.

Constraints and facingMode
getUserMedia takes constraints instead of a device: the page asks for video true with ideal width and height, and when you pick a device it re-requests with an exact deviceId. On phones you can use the picker to choose front or back. The resolution readout shows video.videoWidth × videoHeight — what the camera actually delivers, which is often different from the ideal size you asked for.
Device labels only after permission
enumerateDevices can list your cameras and microphones at any time, but until a permission grant happens each entry's label is an opaque string. That is why the pickers here start as "System default" and fill in with real names right after you press Enable — the same rule shapes every call app's device list.
Level vs volume
The meter shows signal level, not your OS volume setting: it reads the waveform the microphone actually captures, after the OS input gain. A mic that never peaks means low input gain or distance, not a broken device; a meter pinned at 100% with the clipping warning means distortion that everyone on the call will hear.

Frequently Asked Questions

Does this work offline, or without devices?

The page itself is plain HTML/JS — once loaded it works offline, and no server is involved in the test. With no camera or microphone attached the Enable buttons simply report that no matching device was found; nothing crashes and the other section keeps working. On a phone you can flip between front and rear cameras with the device picker.

Will Zoom or Teams see the same result?

Usually yes, because they use the same OS device layer: if the camera streams and the mic meter moves here, the hardware is healthy. The two honest exceptions are apps that hold the device exclusively (some call apps block the browser from opening a camera that is already theirs) and rare drivers that expose only lower resolutions to browsers.

My mic meter barely moves but I can hear myself in recordings — why?

The meter reads the raw input level after your OS input-volume setting, so a low input volume makes a quiet meter even from a working mic. Raise the OS input level to about 80% and speak at normal distance; the clipping warning tells you when you go the other way.

Why do device names appear as 'Microphone (0000…)' until I grant permission?

Browsers hide readable device labels behind the permission prompt to stop sites from fingerprinting your hardware. The labels in the picker here (and in any call app) only become meaningful after you press Enable and allow access — that is a browser privacy rule, not a bug in this page.

Is anything uploaded to a server?

No. Video goes straight from getUserMedia into a local video element; audio is analysed by a Web Audio AnalyserNode in this tab and discarded. No frame is exported via canvas and no audio buffer leaves the page — and stopping or closing the tab releases both devices immediately.