이번시간에 라즈베리파이 카메라로 동영상을 스트리밍 하는 방법에 대해 알아보겠습니다.

라즈베리파이의 스트리밍 기술스택을 알아보면서 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

패키지 설치는 모두 끝났고 이제 홈 디렉토리로 돌아와 쉘 편집기를 열어줍니다.

cd ~

sudo nano mjpg.sh

적혀있는 코드를 아래와 같이 수정합니다. 포트는 사용하지않는 8091를 사용했습니다.

fps 는 디폴트로 5가 설정되어있는데 너무 끊기기 때문에 10정도로 맞춰줬고(전 나중에 15로 바꿔줬어요) -vf옵션으로 상하 반전으로 맞췄습니다.

fps를 높이고 -x,-y 가로세로 폭을 줄여주니깐 화질이 비교적 매끄럽게 나오더라구요.

 

명령어 옵션은 아래 그림을 참고해주세여

이제 아래 명령어로 스트리밍을 실행해봅니다. 

sh mjpg.sh

명령어를 입력하면 아래와 같은 화면이 뜨면서 스트리밍 서버가 실행중임을 알 수 있습니다.

이제 웹에서 ip주소:8091(아까 지정한 포트넘버)를 입력해보겠습니다. 아래화면이 떠야 정상입니다.

왼쪽 배너에서 stream을 클릭해주면 실시간 스트리밍 화면을 볼 수 있습니다.!!

15fps로 맞춰놨는데 엄청 부드럽진 않습니다. 카메라 사양 차이도 있을 것 같네요.

스트리밍을 중단하고 싶으면 아까 스트리밍을 실행시켰던 cmd창에 ctrl+Z를 입력하면 됩니다.

바로 스트리밍을 동작 시키면 프로세스 간 충돌이 일어날 수 있어서 에러가 납니다.

cmd창에 ps명령어로 지금 돌아가고있는 프로세스 목록을 확인하고

아래 명령어로 아직 종료되지 않은 1649 PID를 종료합니다.

 

kill -9 1649

 

이제 다시 확인해보면 지워졋죠?

아닙니다.(defunct는 좀비프로세스로 아직 완전히 종료되지않고 떠돌고 있는 상태의 프로세스입니다.)

mjpg-streamer 프로세스를 종료시키는게 아니라 sh 프로세스(1648번)를 종료해야합니다.

kill -9 1648

sh프로세스와 mjpg_streamer 프로세스가 같이 종료되었습니다.

이제 다시 쉘 명령어로 스트리밍을 시작할 수 있습니다. 

 

참고로 아까 웹사이트에 ip, 포트넘버를 입력하면 어떤 창이 하나 떴잖아요?

이거를 안띄우고 바로 스트리밍 화면을 보고싶다면 웹 주소에 ip주소:포트넘버/?action=stream 꼴로 작성하면됩니다.

ex) 162.178.31.2:8091/?action=stream

 

엔터치면 바로 스트리밍 화면이 뜨는 걸 확인할 수 있습니다.

다시 ps -> kill 명령어로 프로세스를 종료하여 사용을 마치도록합니다.

 

이상입니다!

 

 

+ Recent posts