Browser-Based Video Recording
The browser's MediaRecorder API (part of the WebRTC specification) allows recording audio and video directly from the user's camera and microphone, with no plugins or additional software required. This capability enables a range of applications: video messaging, screen recording tools, remote interviews, and more.
How MediaRecorder Works
The recording process involves several Web APIs working together:
1. Requesting Camera Access
const stream = await navigator.mediaDevices.getUserMedia({
video: { width: 1280, height: 720 },
audio: true
});
The browser prompts the user for permission. The returned MediaStream contains video and audio tracks.
2. Displaying Preview
const videoElement = document.querySelector('video');
videoElement.srcObject = stream;
videoElement.play();
The live camera feed is attached directly to a video element for real-time preview.
3. Recording
const chunks = [];
const recorder = new MediaRecorder(stream, {
mimeType: 'video/webm;codecs=vp9,opus'
});
recorder.ondataavailable = (e) => chunks.push(e.data);
recorder.onstop = () => {
const blob = new Blob(chunks, { type: 'video/webm' });
const url = URL.createObjectURL(blob);
downloadLink.href = url;
};
recorder.start(1000); // Collect data every 1 second
4. Stopping and Downloading
recorder.stop();
stream.getTracks().forEach(track => track.stop()); // Release camera
Video Formats and Codecs
MediaRecorder format support varies by browser:
| Format | Chrome | Firefox | Safari |
|---|---|---|---|
| video/webm | Yes | Yes | No |
| video/mp4 | Partial | No | Yes |
| video/ogg | No | Yes | No |
For maximum compatibility, check support and use the best available format:
const mimeTypes = [
'video/webm;codecs=vp9,opus',
'video/webm;codecs=vp8,opus',
'video/webm',
'video/mp4'
];
const mimeType = mimeTypes.find(m => MediaRecorder.isTypeSupported(m));
Video Resolution and Quality Settings
Camera constraints allow specifying preferred video quality:
const constraints = {
video: {
width: { ideal: 1920, max: 3840 }, // 4K max, prefer 1080p
height: { ideal: 1080 },
frameRate: { ideal: 30, max: 60 },
facingMode: 'user' // Front camera on mobile
},
audio: {
echoCancellation: true,
noiseSuppression: true,
sampleRate: 44100
}
};
These are hints — the browser and hardware may not support all requested settings.
Screen Recording
The getDisplayMedia() API enables recording the user's screen or a specific window:
const screenStream = await navigator.mediaDevices.getDisplayMedia({
video: { mediaSource: 'screen' },
audio: true // System audio (not supported on all platforms)
});
Combining screen and microphone:
const screenStream = await navigator.mediaDevices.getDisplayMedia({video: true});
const micStream = await navigator.mediaDevices.getUserMedia({audio: true});
const combinedStream = new MediaStream([
...screenStream.getTracks(),
...micStream.getTracks()
]);
Privacy and Permissions
Permission States
Camera access can be:
- Granted: User previously approved
- Denied: User blocked access
- Prompt: Will ask the user
Checking Permission Status
const permission = await navigator.permissions.query({ name: 'camera' });
console.log(permission.state); // 'granted', 'denied', or 'prompt'
Indicator Requirements
Most browsers show a recording indicator when camera/microphone is active. This cannot be suppressed.
HTTPS Requirement
Camera and microphone access requires HTTPS or localhost. Insecure HTTP sites cannot access these APIs.
Use Cases
- Video messages: Loom-style async video messages
- Interview tools: Browser-based video interviews
- Content creation: Quick video clips and social content
- Support tools: Record and share bug reproductions
- Education: Lecture capture and student submissions
- Medical: Telehealth symptom documentation
Using the Camera Recorder Tool
Our tool provides:
- Camera selection — choose front or back camera, or external cameras
- Resolution presets — 480p, 720p, or 1080p
- Start/Stop recording — with visual recording indicator and timer
- Pause and resume — pause recording while keeping the session active
- Preview playback — review recordings before downloading
- Download — save recordings as WebM files
- Processing status — clear feedback during encoding
All recording happens locally in your browser — no video data is uploaded to any server.