
이 글에서는 mjpg-streamer를 사용하여 USB 웹캠 영상을 HTTP로 스트리밍하는 방법을 정리하였습니다.
Ubuntu 22.04 (VirtualBox) 환경과 Raspberry Pi 환경 두 가지를 기준으로 설명합니다.

mjpg-streamer는 웹캠에서 JPEG 프레임을 캡처하여 HTTP로 스트리밍하는 경량 커맨드라인 도구입니다.
브라우저, VLC, OpenCV 등 다양한 클라이언트에서 스트림을 수신할 수 있습니다.
먼저 VirtualBox 버전을 확인하고,
해당 버전에 맞는 Extension Pack을 설치해줍니다.


VirtualBox에서 USB 웹캠을 VM으로 연결하려면 직접 할당해야 합니다. 아래 설명은 mjpg-streamer_jacksonliam.github를 참고하였습니다.

VM 실행 창 상단 메뉴에서 장치 → 웹캠 또는 장치 → USB 에서 웹캠 항목을 선택합니다.
USB 허브를 통해 연결된 경우 인식이 안 될 수 있습니다. PC에 직접 연결하는 것을 권장합니다.
연결 후 장치가 인식됐는지 확인합니다.
ls /dev/video*

/dev/video0 또는 다른 번호로 장치가 생성되면 정상입니다.
정확한 장치 번호는 아래 명령으로 확인합니다.
v4l2-ctl --list-devices

sudo apt update
sudo apt install cmake libjpeg8-dev gcc g++
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
make
sudo make install
export LD_LIBRARY_PATH=.
./mjpg_streamer -o "output_http.so -w ./www -l 0.0.0.0 -p 8080" -i "input_uvc.so -d /dev/video1"
-d옵션에 실제 장치 번호를 입력합니다.v4l2-ctl --list-devices로 확인한 번호를 사용합니다.

VM의 IP를 확인합니다.
ip addr | grep inet
같은 네트워크의 기기에서 브라우저로 접속합니다.
http://VM_IP:8080

전체적으로 ubuntu와 흐름은 같습니다.
Raspberry Pi OS (Debian Trixie 기준)에서는 libjpeg8-dev 대신 libjpeg62-turbo-dev를 사용합니다.
sudo apt update
sudo apt install cmake libjpeg62-turbo-dev gcc g++
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
make
sudo make install
lsusb
v4l2-ctl --list-devices
USB 웹캠이 정상적으로 연결됐으면 v4l2-ctl --list-devices 출력에 웹캠 이름과 함께 /dev/video0 등의 장치 경로가 표시됩니다.
export LD_LIBRARY_PATH=.
./mjpg_streamer -o "output_http.so -w ./www -l 0.0.0.0 -p 8080" -i "input_uvc.so -d /dev/video0"
라즈베리파이 IP를 확인합니다.
ip addr | grep inet
같은 네트워크의 기기에서 브라우저로 접속합니다.
http://라즈베리파이_IP:8080

웹캠 연결 확인 (lsusb, v4l2-ctl --list-devices)
↓
의존성 설치 (cmake, libjpeg-dev)
↓
mjpg-streamer 빌드 (make, sudo make install)
↓
실행 (input_uvc.so + output_http.so)
↓
브라우저에서 http://IP:8080 접속 확인