Search code examples
javascriptreactjswebcamreact-hooks

How to get webcam feed with react hooks?


I am trying to get a webcam feed to display on my app using react hooks. I also need to be able to capture the latest image from the feed

I believe I have the foundations but am missing something.

import React,{useState,useEffect} from "react"


export function VideoFeed(){
const[constraints] = useState({width:300,height:300})

useEffect(()=>{
    navigator.mediaDevices.getUserMedia({video:true})
    .then(stream=>{
        let video = document.querySelector('video')
        video.source = stream;
        video.play();
    })
    .catch(e=>{
        console.log(e)
    })
})

return(
    <video autoPlay ={true} id ="video"></video>
)
}

Solution

  • See How to access a DOM element in React? instead of document.querySelector.

    When applied with useRef hook and fixing how often useEffect needs to execute, it would look something like this:

    export function VideoFeed() {
      const videoEl = useRef(null)
    
      useEffect(() => {
        if (!videoEl) {
          return
        }
        navigator.mediaDevices.getUserMedia({video:true})
          .then(stream => {
            let video = videoEl.current
            video.srcObject = stream
            video.play()
          })
      }, [videoEl])
    
      return <video ref={videoEl} />
    }