라즈베리파이 카메라 스트리밍 (MJPG-Streamer)
안녕하세요 ~ 왕발 입니닷 !
오늘 포스팅할 주제는 카메라 스트리밍입니다.
이번에 카메라를 구매했는데요 ~ ㅎㅎ
짜잔~ 카메라 모습입니다 !
이 카메라를 이용하려고 합니다.
화재 감지시에 촬영 후에 촬영된 사진을 보내고, 실시간으로 카메라 스트리밍을 통해서 언제든지
확인할 수 있게끔 만들 예정입니다 !
그러기 위해서는 처음에 카메라 스트리밍을 구현해야 하는데, 여기서 참 막막했습니다.
아파치 서버와 스트리밍 서버 포트를 다르게 해야하는데 어찌 해야할지 몰랐거든요..
일단 sudo raspi-config 에서 카메라를 ON 시켜주세요.
$ sudo apt-get install libjpeg8-dev imagemagick libv4l-dev
> mjpeg 에 이용할 라이브러리를 설치합니다.
$ 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
> mjpg-streamer 를 다운받습니다.
$ unzip mjpg-streamer-code-182.zip
> 알집을 해제합니다.
$ cd mjpg-streamer-code-182/mjpg-streamer
$ make mjpg_streamer input_file.so output_http.so
> mjpg_steam 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
> 라이브러리 복사합니다.
> www폴더를 usr/local/www 로 복사합니다.
$ mkdir /tmp/stream
> stream 될 jpg 파일을 저장하는 임시폴더를 생성합니다.
$ raspistill --nopreview -w 640 -h 480 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 &
> 카메라를 ON 합니다. (계속해서 저장합니다)
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"
> MJPEG-Steamer 를 실행합니다.
> /tem/stream 에 있는 pic.jpg 를 계속해서 불러주는 것이고, 연결할 폴더는 /usr/local/www 입니다. (폴더 바꿧을 시 바꿔주세요)
> 기본 포트가 8080으로 되어있습니다. 저는 아파치가 8080이므로 8888로 변경하였습니다.
LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_file.so -f /tmp/stream -n pic.jpg" -o "output_http.so -p 8888 -w /usr/local/www"
> 포트 8888로 변경해서 실행.
$ cd ../../
$ rm -rf mjpg-streamer-182
> 다운받았던 자료를 삭제합니다.
자.. 여기까지 왔습니다. 간단하게 설명드렸는데요.
여기서 중요한것은
mkdir /tmp/stream <- 임시폴더 생성
raspistill --nopreview -w 640 -h 480 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 & <- 카메라 스트리머 촬영 시작
LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_file.so -f /tmp/stream -n pic.jpg" -o "output_http.so -p 8888 -w /usr/local/www"
<- 스트리머 웹서버Start
이 세가지입니다.
이렇게 카메라를 실행시키고, 스트리머 웹서버를 작동시킨후에 http://IP:8888/ 연결 시에는
이렇게, 웹 스트리머에 접속하셔서 실시간으로 확인하실 수 있습니다.
하지만, 저는 아파치에 연결시켜야 되므로 아파치 camera.php 부분에
<?php
$referer = parse_url($_SERVER['HTTP_REFERER']);
$myip = $referer[host];
$camport = 8888;
//echo "$myip"; // ip 출력
?>
<img alt="" src="http://<?=$myip?>:<?=$camport?>/?action=stream" width="640" height="480" /><br><br>
Cam Server IP : <?=$myip?>:<?=$camport?>
위 소스를 통하여, 스트리머를 웹서버에 띄웠습니다.
중요한 것은, 아파치서버 포트와 스트리머서버 포트가 충돌해서는 안되며,
포트포워딩 하실때 아파치서버 및 스트리머서버 둘다 열어주셔야 한다는 점이 있습니다 !
카메라가 제대로 작동되는지 확인하시려면, config 에서 카메라 ON 하신 후에
raspistill -o /home/pi/ssc/image.jpg
명령어를 입력해주시면 됩니다.
혹시나, 카메라를 거꾸로 메다시는 경우에는
raspistill -vf -hf -o /home/pi/ssc/image.jpg
위 옵션을 이용해주시면, 상하좌우가 반전되서 나오므로 거꾸로 달아도 문제없이 카메라를 출력하실 수 있습니다.
감사합니다.
참고 링크 :
http://blog.miguelgrinberg.com/post/how-to-build-and-run-mjpg-streamer-on-the-raspberry-pi/page/2