React 웹앱을 만들다 보면 카메라 기능을 넣고 싶은 경우가 생긴다. 이럴때 사용할 수 있는 webRTC API 사용을 간단하게 설명해 볼려고 한다.

 

PWA를 사용하여 앱형태로도 카메라를 사용할 수 있기에 여러 방식으로 사용할 수 있다.

 

const videoRef = useRef<HTMLVideoElement | null>(null);
  const [isCameraOn, setIsCameraOn] = useState(false);

  useEffect(() => {
    const initCamera = async () => {
      try {
        const stream = await navigator.mediaDevices.getUserMedia({ video: true });
        if (videoRef.current) {
          videoRef.current.srcObject = isCameraOn ? stream : null;
        }
      } catch (error) {
        console.error("Error accessing camera:", error);
      }
    };

    initCamera();

    return () => {
      // 컴포넌트가 언마운트되면 미디어 스트림 해제
      if (videoRef.current && videoRef.current.srcObject) {
        const tracks = (videoRef.current.srcObject as MediaStream).getTracks();
        tracks.forEach((track) => track.stop());
      }
    };
  }, [isCameraOn]);

  const toggleCamera = () => {
    setIsCameraOn((prevState) => !prevState);
  };
  
  return (
     <div>
       <button onClick={toggleCamera}>{isCameraOn ? "Turn Off Camera" : "Turn On Camera"}</button>
       <video ref={videoRef} autoPlay playsInline />
     </div>
  );

간단하게 버튼을 누를 경우 카메라를 켜고 끌수있는 형태로 구현했다.

 

간단하게 수정할 수 있는 옵션들을 설명하면

<video ref={videoRef} autoPlay playsInline />

 

안에 옵션을 추가할 수 있다.

 

1. autoPlay : 비디오가 로드되면 자동으로 재생여부 [true, false]

2. playsInline : 모바일 브라우저에서 전체화면으로 재생하지 않고 박스나 칸 안에서 재생할지 여부 [true, false]

3. controls : 비디오 플레이어에 재생, 일시정지 등 조절 옵션 사용 여부 [true, false]

4. width, height : 비디오의 너비와 높이 조절 [width = 값 height = 값]

 

으로 크기 및 재생옵션을 설정할 수 있다.

 

현재 예시 코드로 사용 시 모바일 기기도 전면 카메라만 사용가능하고, 후면 카메라 방식은 다음에 추가하겠습니댜