본문으로 바로가기

라즈베리파이 카메라 스트리밍 (MJPG-Streamer)

category IT. 2016. 5. 2. 21:03



라즈베리파이 카메라 스트리밍 (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

'IT.' 카테고리의 다른 글

MYSQL TIMESTAMP  (0) 2016.05.04
라즈베리파이 프로젝트 완성  (29) 2016.05.02
라즈베리파이 프로젝트 진행상황  (0) 2016.05.01