개발자/라즈베리파이4

라즈베리파이4 mjpg 동영상 스트리밍 서버 구현

지구빵집 2022. 4. 24. 16:59
반응형

 

 

시장의 가치사슬을 만들지 않으면, 그러니까 자가발전되는 시스템을 만드는 데 실패하면 끝없이 가장 기본적인 단계에서 했던 일을 반복해야 한다. 지금도 그렇다. 처음 일을 시작할 때든, 아니면 소기의 목적을 달성해 제대로 돌아가는 것을 확인했다면 반드시 시스템으로 만들어라. 시스템이란 하나의 계(界)라서 최소한의 노력만 투입하면 원래 동작하는 방식으로 순환하는 특이라고 볼 수 있다. 

 

다시 mjpg 스트리밍을 라즈베리파이 4에서 구현해 보자. 라즈베리파이의 스트리밍 방법으로는 motion, G-streamer, mjpg-streamer 등 여러 가지 방법이 있는데, 그중에서 mjpg-streamer라는 패키지를 이용해서 동영상을 스트리밍 해보자. 간단하게 구현이 되므로 아래 방법대로 하나씩 진행하자.

 

일단 패키지 설치 전 다음 두 명령어로 패키지를 업데이트/업그레이드해줍니다. 명령어 한 줄을 입력하고 실행이 마치기를 기다린다. $ 표시는 시스템을 표시하는 프롬프트니까 입력하지 않아도 됩니다.

 

sudo apt-get update

sudo apt-get upgrade

 

스트리밍 패키지를 깃허브에서 클론 해 와야하기 때문에 저장할 폴더를 만들어주고 이동한 뒤 패키지를 클론 합니다.

 

mkdir ./mjpg

cd mjpg/

git clone https://github.com/jacksonliam/mjpg-streamer.git

 

다운이 완료됐으면 받은 폴더의 mjpg-streamer/mjpg-streamer-experimental/로 이동합니다.

 

cd mjpg-streamer/

cd mjpg-streamer-experimental/

 

아래 명령어를 입력하여 컴파일 및 설치를 해줍니다.

 

sudo apt-get install cmake

 

이제 mjpg-streamer에 필요한 패키지를 설치합니다.

 

sudo apt-get install python-imaging (여기서 에러 발생은 무시합니다. 업데이트가 다 되어서 그런듯)

sudo apt-get install libjpeg-dev

 

이제 컴파일해줍니다.

 

make CMAKE_BUILD_TYPE=Debug

 

컴파일이 끝나면 mjpg-streamer를 설치합니다.

 

sudo make install

 

패키지 설치는 모두 끝났고 이제 홈 디렉터리로 돌아와 nano 편집기를 열어서 아래 파일대로 입력합니다. 

 

cd ~

sudo nano mjpg.sh

 

nano 에디터에서 아래를 입력하고 ctrl-x 누르고, y 누르고, 엔터를 입력하여 빠져나옵니다.

 

export STREAMER_PATH=$HOME/mjpg/mjpg-streamer/mjpg-streamer-experimental
export LD_LIBRARY_PATH=$STREAMER_PATH
$STREAMER_PATH/mjpg_streamer -i "input_raspicam.so -d 200" -o "output_http.so -w $STREAMER_PATH/www"

 

마지막으로 $sh mjpg.sh 명령어로 실행합니다. 명령어를 입력하면 아래와 같은 화면이 뜨면서 스트리밍 서버가 실행 중임을 알 수 있습니다.

 

pi@raspberrypi:~ $
pi@raspberrypi:~ $ sh mjpg.sh
MJPG Streamer Version: git rev: 310b29f4a94c46652b20c4b7b6e5cf24e532af39
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/input_raspicam/input_raspicam.c, input_init(), 128): argv[0]=raspicam input plugin
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/input_raspicam/input_raspicam.c, input_init(), 128): argv[1]=-d
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/input_raspicam/input_raspicam.c, input_init(), 128): argv[2]=200
Unknown DRC level: 200 i: fps.............: 5
 i: resolution........: 640 x 480
 i: camera parameters..............:

Sharpness 0, Contrast 0, Brightness 50
Saturation 0, ISO 0, Video Stabilisation No, Exposure compensation 0
Exposure Mode 'auto', AWB Mode 'auto', Image Effect 'none'
Metering Mode 'average', Colour Effect Enabled No with U = 128, V = 128
Rotation 0, hflip No, vflip No
ROI x 0.000000, y 0.000000, w 1.000000 h 1.000000
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/output_http/output_http.c, output_init(), 87): output #00
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/output_http/output_http.c, output_init(), 98): argv[0]=HTTP output plugin
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/output_http/output_http.c, output_init(), 98): argv[1]=-w
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/output_http/output_http.c, output_init(), 98): argv[2]=/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/www
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/output_http/output_http.c, output_init(), 165): case 8,9
 o: www-folder-path......: /home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/www/
 o: HTTP TCP port........: 8080
 o: HTTP Listen Address..: (null)
 o: username:password....: disabled
 o: commands.............: enabled
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/mjpg_streamer.c, main(), 401): starting 1 input plugin
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/mjpg_streamer.c, main(), 411): starting 1 output plugin(s)
 i: Starting Camera
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/output_http/output_http.c, output_run(), 225): launching server thread #00
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/output_http/httpd.c, server_thread(), 1555): waiting for clients to connect
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/input_raspicam/input_raspicam.c, worker_thread(), 623): Host init, starting mmal stuff
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/input_raspicam/input_raspicam.c, worker_thread(), 799): Camera enabled, creating encoder
Encoder Buffer Size 81920
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/input_raspicam/input_raspicam.c, worker_thread(), 882): Encoder enabled, creating pool and connecting ports
 DBG(/home/pi/mjpg/mjpg-streamer/mjpg-streamer-experimental/plugins/input_raspicam/input_raspicam.c, worker_thread(), 1006): Starting video output

 

 

크롬 웹브라우저를 열어서 주소 줄에 라즈베리파이 IP주소:8080을 입력합니다. 아래와 같은 mjpg streaming 서버 화면이 뜨고 왼쪽 메뉴에서 Stream 항목을 선택하면 아름다운 동영상을 확인하실 수 있습니다.

 

만약 인터넷이 연결되어 있지 않다면 크로미움 브라우져를 실행시키고 주소줄에 http://localhost:8080 을 입력하세요. 

 

 

 

 

mjpg streaming 서버 화면

 

라즈베리파이 IP주소:8080

참고로 mjpg 스트리밍 서버로 접속하지 않고 전체 화면에서 직접 스트리밍 화면을 불러올 때는 아래 명령어를 입력합니다. 라즈베리파이 주소:8080/?action=stream 명령어를 크롬 주소 줄에 입력합니다. 혹은 다음 주소로 확인합니다. 주소줄에 http://localhost:8080

 

162.168.0.16:8080/?action=stream

 

아래 이미지를 참고하세요. 여기까지 고생하셨습니다. 

 

 

 

현자와 순자가 놀자고 전화가 왔지만 일이 좀 많다. 아이가 집에 올 때까지 많은 일을 해야 한다. 자유롭지만 더 자유롭게, 더 많은 자유는 더 많은 루틴으로부터!

 

 

참고

라즈베리파이 카메라로 mjpg-streamer 구현하기 : 다른 항목 참고

 

 

 

반응형