MJPG Streamer 를 이용한 CCTV 서비스
그동안 MMAL Motion 을 이용한 CCTV 기능을 활용해 왔는데 최신 라즈비안 이미지 JESSIE v8.0 (2015/11 릴리즈) 에서 제대로 동작이 안되는 문제가 있었습니다. 그래서 한층 기능이 강화된 MJPG Streamer를 이용한 CCTV – JPG 영상 스트리밍을 설치해 봤습니다.
MJPG Streamer 는 MMAL Motion 과 마찬가지로 jpg 촬영을 연속으로 수행해서 마치 영상처럼 보이도록 해주는 솔루션(MJPG)입니다. 일련의 설치 과정을 거치면 특정 port 로 접근할 수 있는 HTTP Server 역할을 해줍니다. 이 페이지를 통해 MJPG영상을 볼 수 있도록 해주기 때문에 브라우저로 접속해서 볼 수 있습니다. 예전에는 파폭만 지원했는데 지금은 크롬에서도 잘 보이네요. IE에서는 자바스크립트를 이용해서 보는 방법이 있다고 합니다.
브라우저가 아니라도 VLC player 와 같은 MJPG 스트리밍을 지원하는 플레이어에서도 볼 수 있습니다.
설치 방법
필요한 라이브러리들 먼저 설치
- $ sudo apt-get install git cmake libjpeg8-dev imagemagick libv4l-dev subversion -y
빌드에 필요한 videodev.h 파일이 없으므로 videodev2.h 파일로 연결
- $ sudo ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h
소스 다운로드
- $ wget http://sourceforge.net/code-snapshots/svn/m/mj/mjpg-streamer/code/mjpg-streamer-code-182.zip
압축 해제
- $ unzip mjpg-streamer-code-182.zip
빌드
- $ cd mjpg-streamer-code-182/mjpg-streamer
- $ make mjpg_streamer input_file.so output_http.so
인스톨
- $ sudo cp mjpg_streamer /usr/local/bin
- $ sudo cp output_http.so input_file.so /usr/local/lib/
- $ sudo cp -R www /usr/local/www
스트리밍용 이미지 저장 디렉토리 생성
- mkdir /tmp/stream
테스트
스트리밍에 필요한 프로세스들을 실행합니다. 먼저 사진을 촬영할 raspistill 실행.
- $ raspistill –nopreview -w 640 -h 480 -q 5 -o /tmp/stream/pic.jpg -tl 1000 -t 9999999 -th 0:0:0 &
옵션의 의미는 ==> 프리뷰 실행 안함, 가로 640, 세로 480 이미지로 생성, jpg 퀄리티 5, 지정한 경로에 pic.jpg 파일로 생성, 1000ms(1초)에 한번씩 촬영, 촬영 시간제한 최대 (99999999), 백그라운드로 실행
이제 이미지를 웹으로 스트리밍해 줄 mjpg_streamer 를 실행합니다.
- $ LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i “input_file.so -f /tmp/stream -n pic.jpg” -o “output_http.so -w /usr/local/www -p 8081”
옵션 중 -p 8081 을 주의하세요. -p 는 MJPG Streamer 가 외부로 연결되는 HTTP 포트를 지정하는 옵션입니다. 이 값을 다른 서비스와 충돌하지 않도록 적당한 값으로 바꿔 사용하세요.
에러 없이 명령어가 실행되면 2개의 프로세스가 돌아가면서 MJPG 스트리밍 서비스를 해줍니다. 브라우저로 확인하고 싶으시면 아래 주소로 접속하면 됩니다.
- http://라즈베리파이IP:8081
같은 공유기 내부에서 접속하는 경우라면 http://192.168.x.x:8081 형태가 될 것이고, 외부망에서 접속하는 경우라면 공유기에서 포트포워딩을 해줘야 합니다.
여기까지 문제가 없다면 브라우저에서 접속했을 때 아래와 같은 화면을 볼 수 있습니다.
HTML 페이지에 사진이나 영상을 삽입할 수도 있습니다.
정지화면을 보여주는 HTML 태그
- <img src=”http://아이피주소:8083/?action=snapshot”>
- 주소 : http://아이피주소:8083/?action=snapshot
영상을 보여주는 HTML 태그
- <img src=”http://아이피주소:8083/?action=stream”>
- 주소 : http://아이피주소:8083/?action=stream
스트리밍을 멈추고 싶다면 아래 명령어를 실행하세요.
- $ sudo pkill mjpg_streamer
- $ sudo pkill raspistill
참고자료