라즈베리파이 카메라 동영상 스트리밍

이번 포스팅에서는 라즈베리파이 카메라 모듈로 스트리밍 하는 법에 대해 알아보겠습니다.

 

스트리밍(Streaming)이란 인터넷에서 음성, 영상 데이터를 실시간으로 재생하는 기술을 뜻합니다.

 


 

사진출처: https://www.vsn-tv.com/en/why-every-broadcaster-needs-a-streaming-platform/


서버에 업로드된 영상을 클라이언트가 별도의 다운로드 없이 시청할 수 있게 해줍니다.
스트리밍 기술 사용 예로는 유튜브가 있겠네요.


라즈베리파이에서도 몇가지 패키지를 이용하면 동영상 스트리밍을 할 수 있습니다.
mjpg streamer라는 패키지를 사용해 보겠습니다.



~$ sudo apt-get update

~$ sudo apt-get upgrade
명령을 차례로 입력해 줍니다.

새로운 패키지를 설치할 때 습관적으로 해주면 좋을 거 같습니다.
가끔 패키지 설치가 진행이 안될 때가 있는데 원인이 오타, update인 경우더라구요.

 

 

~$ mkdir mjpg

우선 mjpg-streamer를 설치하기 전에 설치를 위해 수고해줄 디렉토리(폴더)를 생성합니다.



~$ cd ./mjpg

명령을 입력해서 디렉토리 안으로 들어가 줍니다.

 

 

 

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

mjpg_streamer의 git 파일을 받아줍니다.

 



~/mjpg $ cd mjpg-streamer/

~/mjpg/mjpg-streamer $ cd mjpg-streamer-experimental/
명령을 입력해서 디렉토리를 이동해 줍니다.

 

 

~/mjpg/mjpg-streamer/mjpg-streamer-experimental $ sudo apt-get install cmake

~/mjpg/mjpg-streamer/mjpg-streamer-experimental $ sudo apt-get install python-imaging
~/mjpg/mjpg-streamer/mjpg-streamer-experimental $ sudo apt-get install libjpeg-dev

apt-get을 이용해서 mjpg-streamer에 필요한 패키지들을 설치해 줍니다.
이미 설치되어 있다면 위 사진의 메시지가 표시될 것입니다.



~/mjpg/mjpg-streamer/mjpg-streamer-experimental $ make CMAKE_BUILD_TYPE=Debug

컴파일해줍니다.

 

 

 

컴파일 하는 중~

 

컴파일이 끝난 모습입니다!

 



~/mjpg/mjpg-streamer/mjpg-streamer-experimental $ sudo make install

mjpg-streamer를 설치해 줍니다.

 

 

설치중~

 

 

설치 완료!!


이제 mjpg-streamer를 사용하기 위한 준비가 다 끝났습니다.
이제 스트리밍을 위한 코드를 작성해 봐야겠죠?

~/mjpg/mjpg-streamer/mjpg-streamer-experimental $ cd ~
명령을 입력해서 HOME 디렉토리로 돌아옵니다.

 

 


~ $ sudo nano mjpg.sh

위 명령을 입력해서 편집기를 열어줍니다.

 

 

export STREAMER_PATH=$HOME/mjpg/mjpg-streamer/mjpg-streamer-experimental

export LD_LIBRARY_PATH=$STREAMER_PATH
$STREAMER_PATH/mjpg_streamer -i "input_raspicam.so" -o "output_http.so -p 8091 -w $STREAMER_PATH/www"

위 코드를 입력하고 Ctrl + X + Y + Enter로 코드를 저장해 줍니다.

-i 뒤의 큰따옴표("")로 묶인 부분은 파이카메라의 입력 옵션이고,
-o 뒤의 큰따옴표는 스트리밍 출력 옵션입니다.

-vf는 상하반전, -d는 스트리밍 캡쳐 사이의 딜레이를 의미합니다.
-p는 포트번호이고 여기서는 사용하지 안흔ㄴ 포트인 8091 포트를 사용했습니다. 비어있는 포트면 아무거나 사용가능합니다.
-w는 웹스트리밍에 필요한 리소스들을 저장한 디렉토리를 의미합니다. (링크 따라가보면 리소스 파일이 있습니다.)



입출력 옵션에 -help라고 옵션을 추가하면 다른 입출력옵션을 확인할 수 있습니다.

-x와 -y를 이용해서 화면을 줄이고 -fps로 프레임수를 늘리니까 꽤 매끄러운 화면이 스트리밍되네요.

 

 

~ $ sh mjpg.sh

위의 명령어를 입력해서 스트리밍을 시작합니다.

영상이 잘 나오고 있는지 확인하려면 스트리밍을 하는 서버에 접속해야 합니다.

 



~ $ ifconfig 명령을 입력해서 라즈베리파이의 ip주소를 찾아줍니다.

랜선으로 연결되어 있다면 eth0, 와이파이로 연결되어 있다면 wlan0의 2번째 줄 inet 부분에 적힌 주소가 라즈베리파이의 ip입니다.
ip를 확인했다면 브라우저를 열어서 주소창에 ip주소:8091 을 입력해 줍니다.

 

 


오 뭔가 나타났습니다.

왼쪽 메뉴의 Stream을 선택해 줍니다.

 


스트리밍이 잘되고 있네요.

* 주소창에서 ip:8091/?action=stream으로 접속하면 스트리밍 화면만 출력됩니다.

 

 

스트리밍을 중단하고 싶다면 터미널 창에 Ctrl + Z를 입력하면 됩니다.

다시 스트리밍을 하고 싶다면 ~$ sh mjpg.sh를 입력하면... 안되네요...?



프로세스간 충돌이 일어난 거 같습니다.

그렇다면 이전 프로세스를 죽여 봅시다.

 


 

ps 명령을 입력하면 현재 실행되고 있는 프로세스를 확인할 수 있습니다.

sh와 mjpg가 실행되고 있네요. 이녀석들이 실행되고 있어서 충돌이 일어났나봅니다.
이 친구들을 죽여봅시다. ^^
sh와 mjpg의 PID를 확인합니다. (PID가 항상 같지 않습니다.)

 






~ $ kill -9 [sh의 PID]

-9는 강제종료 옵션입니다. kill 명령어를 이용해 sh 프로세스를 강제종료 시켰습니다.

 



sh를 종료시키니까 mjpg도 같이 종료되네요.

이제 다시 스트리밍을 시작할 수 있게 되었습니다!


여기까지 mjpg-streamer 사용법이었습니다.


  •  34,145
  •  9
  •  0

ysh 2019-04-12 20:18:30

서버까지 연결은 됬는데 영상나오는 부분이 그냥 흰색이면 카메라의 고장인가요?

ASAP 2019-05-05 13:51:28

감사합니다 ^^

관리자 2019-09-05 17:45:19

sh mjpg.sh 명령을 입력했을 때, 스트리밍서버에 대한 코드가 지속적으로 갱신되고, IP:포트번호 URL로 접속가능한게 맞으시다면, 카메라 확인을 한 번 해보셔야 할 것 같습니다.

oo 2019-09-09 14:47:06

안녕하세요 마지막까지왔는데 notfound가 떠서 뎃글남김니다 sudo로 실행하면 notfound가 뜨고 그냥sh mjpg.sh로 실행하면 can't open mjpg.sh가 뜨네요 똑같이 따라했습니다 권한도 다줬는데 어디가 문제인지 모르겠네요 ㅜㅜ 확인좀 부탁드립니다

아잉 2019-11-07 15:18:59

좋은 자료 감사합니다. 올려주신 자료들중 아래 sh 내용에서 -output => _output이라고 오타가 있어 알려드립니다 ㅎㅎ 그런데 저장한 영상을 실시간 처리하는 과정은 아는데 스트리밍하고 있는 해당 영상을 알고 싶은데 어떻게 이어주면 될까요?

코린이 2019-12-23 16:29:59

~/mjpg/mjpg-streamer/mjpg-streamer-experimental $ sudo apt-get install python-imaging를 쳤을때 마지막에 package python-imaging has no installation candidateㄹ고 에러뜨면서 안되는서 같은데 어떻게 하나요

뿌린스 2020-11-17 17:25:35

덕분에 스트리밍 정말 잘하고있습니다.ㅎㅎ 제가 사용중인 공유기를 포트포워딩하여 외부에서 스트리밍영상에 접속을 성공했었습니다만 다음날 다시 해보니 접속이 안되네요ㅠㅠ mjpg-streamer를 이용하여 외부접속하려면 어떻게 해야할까요?

sposync 2022-01-07 05:54:42

Hello, This is Future Dimension, we provide sposync.com to access to your device with streaming and control using webRTC technology Free. Only one required app is a web browser - Chromium and provided python websocket server on RPI. (tested for Buster and Chromium 72) You can define the control command and extra security key if needed. With these inputs, only you can access to your device remotely. Please contact misdiva1bil@gmail.com Thanks, David FDI RPI 탑재 Chromium 활용 원격 접속 제어 및 스트리밍 서비스 무료 - 앱 개발전 간단한 제어 명령만 정의되면 기능등 시험 가능 sposync.com

ㅇㅇ 2023-03-22 06:09:54

좋은 자료 감사합니다 질문 있는데 혹시 야간에도 촬영이 가능한건가요? 아기의 자세랑 얼굴 인식을 위해서 사용할 예정입니다.


댓글을 남겨 주세요.