반응형

라즈베리파이에 연결된 카메라로부터 캡쳐된 영상을 웹브라우저에서 볼 수 있도록 mjpg-streamer를 사용하는 방법을 설명하고 있습니다. 

 

다음 블로그 글을 참고하여 진행했습니다.

 

https://desertbot.io/blog/how-to-stream-the-picamera 




1. 라즈베리파이에 웹캠 또는 파이 카메라를 연결하고 사용할 수 있도록 설정합니다. 

 


Raspberry Pi Camera Module( pi camera ) 사용하는 방법
http://webnautes.tistory.com/929  




2. mjpg-streamer 소스 코드를 다운로드 받을 디렉토리를 생성합니다. 

 

pi@raspberrypi:~ $ mkdir project

pi@raspberrypi:~ $ cd project

pi@raspberrypi:~/project $



3. 깃허브에서 소스 코드를 다운로드 받기위해서 git가 필요합니다.

 

pi@raspberrypi:~/project $ sudo apt-get install git




4. mjpg-streamer 소스 코드를 다운로드를 합니다. 

 

pi@raspberrypi:~/project $ git clone https://github.com/jacksonliam/mjpg-streamer.git





5. mjpg-streamer 소스 코드를 컴파일하기 위해 필요한 패키지를 설치합니다.

 

pi@raspberrypi:~/project $ sudo apt-get install cmake python-pil python3-pil libjpeg-dev build-essential





6. OpenCV 4를 사용할 경우 컴파일시 에러가 나기 때문에 소스코드를 수정해야 합니다.

OpenCV 3을 사용한다면 다음 단계로 넘어가세요. 



 nano 편집기로 파일을 열은 후, 

 

pi@raspberrypi:~/project $ nano mjpg-streamer/mjpg-streamer-experimental/plugins/input_opencv/input_opencv.cpp





CTRL +  _를 누르고 408 엔터를 눌러 408번째 줄로 이동합니다. 

 

다음처럼 수정합니다. 

 

수정 전

    compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);

 

수정 후

    compression_params.push_back(cv::IMWRITE_JPEG_QUALITY);

 

Ctrl + O를 눌러 저장하고 

Ctrl + X를 눌러 편집기에서 빠져나옵니다. 




7. mjpg-streamer 소스 디렉토리로 이동하여 컴파일 및 설치를 진행합니다.

 

pi@raspberrypi:~/project $ cd mjpg-streamer/mjpg-streamer-experimental/

pi@raspberrypi:~/project/mjpg-streamer/mjpg-streamer-experimental $ make CMAKE_BUILD_TYPE=Debug

pi@raspberrypi:~/project/mjpg-streamer/mjpg-streamer-experimental $ sudo make install

pi@raspberrypi:~/project/mjpg-streamer/mjpg-streamer-experimental $ cd

pi@raspberrypi:~ $





8. /dev/video0에 연결된 웹캠으로부터 캡처한 영상을 HTTP 포트 8090으로 스트리밍하도록 합니다. 

 

pi@raspberrypi:~ $ mjpg_streamer -i "input_uvc.so -d /dev/video0" -o "output_http.so -p 8090 -w /usr/local/share/mjpg-streamer/www/"





9. 라즈베리파이 카메라를 사용할 경우에는 video0 디바이스 파일을 생성하거나  input_uvc.so 대신에 input_raspicam.so를 사용하면 됩니다.  카메라가 뒤집혀서 연결되기 때문에 -vf 옵션을 추가해야 합니다.  첫번째 방법에선 vf 옵션이 적용안되었습니다. 

 

참고로 첫번째 방법이 더 빠릅니다. 

 

pi@raspberrypi:~ $ sudo modprobe bcm2835-v4l2

pi@raspberrypi:~ $ mjpg_streamer -i "input_uvc.so" -o "output_http.so -p 8090 -w /usr/local/share/mjpg-streamer/www/"




또는

 

pi@raspberrypi:~ $ mjpg_streamer -i "input_raspicam.so -vf" -o "output_http.so -p 8090 -w /usr/local/share/mjpg-streamer/www/"





자세한 옵션은 다음처럼 확인 가능합니다.

 

pi@raspberrypi:~ $ mjpg_streamer -i 'input_raspicam.so --help' 

pi@raspberrypi:~ $ mjpg_streamer -i 'input_uvc.so --help' 





10. 카메라로부터 영상을 캡쳐하여 웹으로 전송되는 상황을 볼 수 있습니다.

 




11. PC의 웹브라우저로 라즈베리파이_아이피주소:8090에 접속합니다.

 




12. 왼쪽 메뉴에서 Static을 선택할 때 마다 스냅사진이 새로 갱신됩니다. 

 




13. 왼쪽 메뉴에서 Stream을 선택하면 실시간 영상을 볼 수 있습니다.

 




14. 웹문서없이 이미지만 받고 싶다면 다음 주소를 사용하면 됩니다.



스냅사진 - 라즈베리파이_아이피주소:8090/?action=snapshot

 




실시간 영상 - 라즈베리파이_아이피주소:8090/?action=stream

 





코드로 접근하기 위해서는 OpenCV를 사용하면 됩니다. 아래 포스트를 참고하세요..

 

mjpg-streamer를 사용한 웹 스트리밍을 OpenCV에서 가져오기

https://webnautes.tistory.com/1262 




최초 작성. 2018. 10. 28

최종 작성. 2020. 5. 18

 

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts