top drop menu

Recent Post

토요일, 11월 12

라즈베리파이에 MJPG-Streamer 설치하고 동작 시키기

파이 케마라를 달았으니 이제 웹스트리밍을 해 보자. 카메라가 설치 된 라즈베리파이 자체에서 보는게 아니라 다른 컴퓨터나 외부에서 카메라 영상을 실시간으로 확인 할 수 있도록 하는 것이다. 쉽게 말해서 라즈베리파이을 실시간 CCTV처럼 활용할 수 있게 된다는 것이다. 정말 CCTV기능을 원한다면 CCTV로 나온 기기를 사는게 나은 선택이겠지만 라즈베리파이의 다양한 활용방법을 배워 보는것도 의미 있는 일이라고 생각된다.
라즈베리파이에서 스트리밍을 할 수 있는 여러가지 툴들이 있지만 여기서는 MJPGE-Streamer를 이용해 보자. 단계별로 설치와 동작 시키는 방법에 대해 알아 보자.

1. MJPG-Streamer에 필요한 몇가지 라이브러리 설치
$ sudo apt-get install libjpeg8-dev imagemagick libv4l-dev

2. 변경된 Videodev.h 심볼릭 링크 걸기
$ sudo ln -/usr/include/linux/videodev2./usr/include/linux/videodev.h

3. MJPG-Streamer 다운로드 하기
$ wget http://sourceforge.net/code-snapshots/svn/m/mj/mjpg-streamer/code/mjpg-streamer-code-182.zip
* 다운로드가 제대로 되지 않은다면 https://sourceforge.net/p/mjpg-streamer/code/HEAD/tarball 에서 수동으로 다운로드 받아서 설치하자.

4. 압축 풀기
$ unzip mjpg-streamer-code-182.zip

5. 빌드
$ cd mjpg-streamer-code-182/mjpg-streamer $ make mjpg_streamer input_file.so output_http.so

6. 인스톨 MJPG-Streamer
$ 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

모두가 자동 인스톨이 아니라서 수동으로 몇가지 파일을 적절한 곳에 카피 해줘야 한다. 어쨌든 이것으로 설치는 완료 되었다. 이제 카메라를 시작하면 된다.

7. 카메라 시작
$ mkdir /tmp/stream $ raspistill --nopreview -640 -480 -5 -vf -/tmp/stream/pic.jpg -tl 100 -9999999 -th0:0:0 &

스트리밍에 필요한 폴더를 하나 만들어 주고 이 예제에서는 /tmp/stream이라는 폴더를 지정했다. raspistil를 각자의 옵션에 따라 백그라운드로 실행한다.raspistill 뒤에 따라 오는 옵션들은 각자의 상황에 맞게 재설정 해주면 된다. -q는 사진 퀄리티 0~100사이, -o는 파일 저장, -tl은 타임랩스 몇조마다 찍을 것인지 1000이 1초이다. -t는 작동시간? 설정하지 않으면 5초라고 한다. 무한정 작동되는게 아니란 말인가? 이부분은 좀 더 알아 보자. -th는 썸네일 크기이다. w:h:quality 필요없으니 모두 0으로 설정되어 있다.개인적으로는 카메라를 거꾸로 달았 놓아서 재생시 영상을 뒤집어 주도록 옵션(-vf)을 추가해 주었다. 

파이 카메라는 계속해서 열심히 사진을 찍어서 임시 폴더에 저장을 한다. 스틸사진을 찍고 그사진을 연속적으로 전송해서 동영상 처럼 보이게 하는 방식인듯 하다. 어차피 동영상이라는게 움직이는 스틸사진이잖아. ^^

8. MJPG-Streamer를 시작한다.
LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -"input_file.so -f /tmp/stream -n pic.jpg" -o"output_http.so -w /usr/local/www"


서버 실행 옵션이 좀 복잡하다. 일단 그대로 실행하자. 자세한 것은 다음에 천천히 알아 보자. 이제 라즈베리파이에서 할 것은 이것이 전부이다. 클라이언트 컴에서 웹브라우저를 통해 영상을 확인하면 된다. 

http://자신의라즈베리파이ip주소:8080 으로 접속하면 된다. 그럼 아래 그림 처럼 접속이 된다.



그런데 좀 불편한 점이 있다. 매번 위에서 했던 긴 명령어를 입력해야 하는것은 문제이다. 좀 간단한 방법이 있다. 실행 스크립트를 만들어 놓으면 실행하기가 쉽다.

<스트리밍 시작 스크립트>

#!/bin/bash

if [ ! -d /tmp/stream ]
then
mkdir /tmp/stream/
fi

if pgrep raspistill > /dev/null
then
echo "raspistill already running"
else
raspistill -w 640 -h 480 -q 5 -vf -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 -n > /dev/null 2>&1&
echo "raspistill started"
fi

if pgrep mjpg_streamer > /dev/null
then
echo "mjpg_streamer already running"
else
LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -"input_file.so -f /tmp/stream -n pic.jpg" -o"output_http.so -w /usr/local/www" > /dev/null 2>&1&
echo "mjpg_streamer started"
fi 




----------------
<중지하는 스크립트>

#!/bin/bash 

if pgrep raspistill 
then 
kill $(pgrep raspistill) > /dev/null 2>&1 
echo "raspistill stopped" 
else 
echo "raspistill not running" 
fi 

if pgrep mjpg_streamer 
then 
kill $(pgrep mjpg_streamer) > /dev/null 2>&1 
echo "mjpg_streamer stopped" 
else 
echo "mjpg_streamer not running" 
fi 



---------------
위 파일들을 적당한 곳에 저장해 놓고 파일에 실행권한을 부여하고 
$chmod +x filename.sh

$sh start_stream.sh
$sh stop_stream.sh


* 외부에서 접속해서 확인 하고 싶다면 사용중인 공유기에서 DDNS 설정과 포트포워딩을 해주면 된다. 자세한것은 다른 글을 검색해서 설정하자. 여기서는 다루지 않는다.
Blogger Widget