Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

react-record-webcam

Package Overview
Dependencies
Maintainers
1
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-record-webcam

A React webcam component 🎬📹

  • 0.0.7
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
2.7K
increased by7.87%
Maintainers
1
Weekly downloads
 
Created
Source

TypeScript

Webcam video and audio recording hook and component for React. Use hook for newer React versions, component uses classes so all React versions are supported. Works in all latest browser versions, although Safari requires MediaRecorder to be enabled in the experimental features.

Demo


Install dependency

yarn add react-record-webcam

Hook

import { useRecordWebcam } from 'react-record-webcam'

function RecordVideo(props) {
  const recordWebcam = useRecordWebcam();
  return (
    <div>
      <p>Camera status: {recordWebcam.status}</p>
      <button onClick={recordWebcam.open}>Open camera</button>
      <button onClick={recordWebcam.start}>Start recording</button>
      <button onClick={recordWebcam.stop}>Stop recording</button>
      <button onClick={recordWebcam.retake}>Retake recording</button>
      <button onClick={recordWebcam.download}>Download recording</button>
      <video ref={recordWebcam.webcamRef} autoPlay muted />
      <video ref={recordWebcam.previewRef} autoPlay muted loop />
    </div>
  )
}

Import the hook and initialize it in your function. The hook returns refs for both preview and recording video elements, functions to control recording (open, start, stop, retake, download) and camera status.

import { useRecordWebcam, CAMERA_STATUS } from 'react-record-webcam'

You can also import the CAMERA_STATUS constant to check for different states and toggle your UI accordingly. Check the CodeSandbox demo for a more thorough example on how to do this.

Passing options:

const OPTIONS = { ... }

const recordWebcam = useRecordWebcam(OPTIONS);
Option
downloadFileName?: stringSet a namespace for the component CSS classes
recordingLength?: numberLength of recording in seconds
recordingLength: numberSet max recording length in seconds
namespace: stringPass own CSS namespace
options: RecorderOptionsOptions for recording video
`type: video
`mimeType: video/mp4
video: { minWidth, minHeight, maxWidth, maxHeight, minAspectRatio }

Component

import { RecordWebcam } from 'react-record-webcam'

...

function RecordVideo(props) {
  return (
    <RecordWebcam />
  )
}

You can include the component as is and it will render controls, video and preview elements. Alternatively you can use the render prop for more control:

function RecordVideo(props) {
  return (
    <RecordWebcam
      render={(props: WebcamRenderProps) => {
        return (
          <div>
            <h1>Component render prop demo</h1>
            <p>Camera status: {props.status}</p>
            <div>
              <button onClick={props.openCamera}>Open camera</button>
              <button onClick={props.retake}>Retake</button>
              <button onClick={props.start}>Start recording</button>
              <button onClick={props.stop}>Stop recording</button>
              <button onClick={props.download}>Download</button>
            </div>
          </div>
        );
      }}
    />
  )
}

You can use the below default class names or pass your own namespace to replace the default react-record-webcam.

className
react-record-webcam__wrapper
react-record-webcam__status
react-record-webcam__video
react-record-webcam__controls
react-record-webcam__controls-button

Prop
cssNamespace: stringSet a namespace for the component CSS classes
downloadFileName: stringFilename for video download
getStatusCallback to get webcam status
recordingLength: numberSet max recording length in seconds
namespace: stringPass own CSS namespace
options: objectOptions for recording video
`type: video
`mimeType: video/mp4
video: { minWidth, minHeight, maxWidth, maxHeight, minAspectRatio }
controlLabels: objectPass custom labels to control buttons
{ CLOSE, DOWNLOAD, OPEN, RETAKE, START, STOP }
renderRender prop that passes status and controls
isWebcamOn
isRecording
isPreview
openCamera
closeCamera
start
stop
retake
download
status

FAQs

Package last updated on 01 Nov 2020

Did you know?

Socket

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc