Security News
Research
Supply Chain Attack on Rspack npm Packages Injects Cryptojacking Malware
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
react-webcam
Advanced tools
The react-webcam package is a React component that allows you to capture images and videos from your webcam. It provides a simple interface for accessing the webcam and capturing media, making it useful for applications that require user media input.
Capture Image
This feature allows you to capture an image from the webcam. The `getScreenshot` method is used to take a snapshot and return it as a base64-encoded image string.
import React, { useRef, useCallback } from 'react';
import Webcam from 'react-webcam';
const WebcamCapture = () => {
const webcamRef = useRef(null);
const capture = useCallback(() => {
const imageSrc = webcamRef.current.getScreenshot();
console.log(imageSrc);
}, [webcamRef]);
return (
<div>
<Webcam
audio={false}
ref={webcamRef}
screenshotFormat="image/jpeg"
/>
<button onClick={capture}>Capture photo</button>
</div>
);
};
export default WebcamCapture;
Capture Video
This feature allows you to capture video from the webcam. The `MediaRecorder` API is used to record the video stream and save it as a Blob, which can then be played back using a video element.
import React, { useRef, useState } from 'react';
import Webcam from 'react-webcam';
const WebcamVideoCapture = () => {
const webcamRef = useRef(null);
const [recording, setRecording] = useState(false);
const [mediaRecorder, setMediaRecorder] = useState(null);
const [videoUrl, setVideoUrl] = useState(null);
const startRecording = () => {
const stream = webcamRef.current.stream;
const mediaRecorder = new MediaRecorder(stream);
setMediaRecorder(mediaRecorder);
mediaRecorder.start();
setRecording(true);
mediaRecorder.ondataavailable = (event) => {
const videoBlob = new Blob([event.data], { type: 'video/webm' });
const videoUrl = URL.createObjectURL(videoBlob);
setVideoUrl(videoUrl);
};
};
const stopRecording = () => {
mediaRecorder.stop();
setRecording(false);
};
return (
<div>
<Webcam audio={true} ref={webcamRef} />
{recording ? (
<button onClick={stopRecording}>Stop Recording</button>
) : (
<button onClick={startRecording}>Start Recording</button>
)}
{videoUrl && <video src={videoUrl} controls />}
</div>
);
};
export default WebcamVideoCapture;
Mirror Mode
This feature allows you to enable mirror mode for the webcam feed. Setting the `mirrored` prop to `true` flips the video horizontally, which can be useful for applications like video conferencing.
import React from 'react';
import Webcam from 'react-webcam';
const WebcamMirror = () => {
return (
<div>
<Webcam
audio={false}
screenshotFormat="image/jpeg"
mirrored={true}
/>
</div>
);
};
export default WebcamMirror;
react-camera-pro is another React component for capturing images and videos from the webcam. It offers similar functionalities to react-webcam but with a more modern API and additional features like camera switching and video recording with pause/resume capabilities.
react-html5-camera-photo is a React component that provides a simple interface for capturing photos using the HTML5 getUserMedia API. It is more focused on photo capture and offers fewer features compared to react-webcam, but it is lightweight and easy to use.
react-webcam-onfido is a React component specifically designed for capturing webcam images for identity verification purposes. It offers additional features like face detection and image quality checks, making it more specialized compared to the general-purpose react-webcam.
Webcam component for React. See this for browser compatibility.
npm install react-webcam
https://www.mozmorris.com/react-webcam/examples/ (if demo doesn't work, check browser compatibility and verify browser is using https)
import React from 'react';
import Webcam from 'react-webcam';
class Component extends React.Component {
render() {
return <Webcam/>;
}
}
prop | type | default | notes |
---|---|---|---|
className | string | '' | CSS class of video element |
audio | boolean | true | enable/disable audio |
height | number | 480 | height of video element |
width | number | 640 | width of video element |
style | object | style prop passed to video element | |
screenshotFormat | string | 'image/webp' | format of screenshot |
onUserMedia | function | noop | callback when component receives a media stream |
audioSource | string | an array or single ConstrainDOMString(s) specifying the device id | |
videoSource | string | an array or single ConstrainDOMString(s) specifying the device id |
getScreenshot
- Returns a base64 encoded string of the current webcam image. Example:
class WebcamCapture extends React.Component {
setRef = (webcam) => {
this.webcam = webcam;
}
capture = () => {
const imageSrc = this.webcam.getScreenshot();
};
render() {
return (
<div>
<Webcam
audio={false}
height={350}
ref={this.setRef}
screenshotFormat="image/jpeg"
width={350}
/>
<button onClick={this.capture}>Capture photo</button>
</div>
);
}
}
MIT
Many thanks to @cezary for his work on this component.
FAQs
React webcam component
The npm package react-webcam receives a total of 166,282 weekly downloads. As such, react-webcam popularity was classified as popular.
We found that react-webcam demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.
Security News
Sonar’s acquisition of Tidelift highlights a growing industry shift toward sustainable open source funding, addressing maintainer burnout and critical software dependencies.