여러분은 가만히 계세요 제가 모두 고장낼게요

IT 지식, PC 모바일 문제 해결 그리고 종종 애니 게임 일상생활 근황을 종종 올리고 있어요!

냐.한국 자세히보기

임베디드

2023년 라즈베리파이 또는 OctoPi에서 MJPEG 스트리머 빌드하기

Kamilake 2023. 1. 5. 14:30
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

최신 mjpg-streamer 분기에서는 파이의 라이브러리 이동으로 인해 input_rapicam.so를 빌드하지 못합니다.

이 문제를 해결하는 가이드를 포함해 전체 설치 가이드를 남겨볼게요.

파이 접속

먼저 pi에 ssh로 접속해주세요.

Windows Terminal

터미널에서 ssh 이름@주소 조합으로 들어가셔도 되고 PuTTY 같은 다른 터미널 소프트웨어를 쓰셔도 좋습니다.

리포지토리 클론

그 다음은 MJPG 최신 스트리머를 가져올게요.

 

GitHub - jacksonliam/mjpg-streamer: Fork of http://sourceforge.net/projects/mjpg-streamer/

Fork of http://sourceforge.net/projects/mjpg-streamer/ - GitHub - jacksonliam/mjpg-streamer: Fork of http://sourceforge.net/projects/mjpg-streamer/

github.com

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

cd mjpg-streamer/mjpg-streamer-experimental/

빌드

폴더에 들어가셨는데, 이 작업 전에 다른 게시글 등을 보고 빌드하셨다면 먼저 청소를 해야 합니다.

make distclean

설치하기 전에 ~/mjpg-streamer/mjpg-streamer-experimental/plugins/input_raspicam 경로로 이동하면 CMakeLists.txt 파일이 있는데, 열어서 /opt/vc/로 지정되어 있는 include 폴더들을 전부 /usr/로 바꿔줘야 합니다.

왜냐하면 opt/vc는 없는 폴더인데다 실제 라이브러리는 모두 /usr에만 있지만 라이브러리 경로 업데이트가 조금 늦는 모양이네요.

변경 전 / 변경 후

수동으로 바꾸는 대신 다음 스크립트로 한방에 바꾸실 수도 있습니다.

sed -i -e 's/opt\/vc/usr/g' ~/mjpg-streamer/mjpg-streamer-experimental/plugins/input_raspicam/CMakeLists.txt

제대로 변경되었다면 빌드하러 갑시다. 다시 메인 폴더로 나와서 다시 빌드합니다.

cd ~/mjpg-streamer/mjpg-streamer-experimental/

make -j1

(make에서 디버그 모드로 빌드하고 백그라운드에서 실행하지 마세요. 테스트용으로는 아주 좋지만, 그대로 까먹고 사용하면 각 프레임별 로그를 기록하는데, 엄청난 로그를 SD카드에 남기면서 카드의 수명을 매우 단축시킵니다.)

ls

로그를 안 봐도 input_raspicam.so 파일이 잘 생성된 것만 확인해주시면 됩니다.

레거시 카메라 활성화

최근에 RPi Cam v2가 출시되면서 v1 카메라를 파이에서 레거시로 분류하기 시작했습니다.

Raspberry Pi Camera V2.1

전면은 v1과 v2가 큰 차이가 없고 알아보기 쉬운 차이점은 렌즈 하단에 Camera <버전> 표기가 있다는 겁니다.

v1은 내부에 ISP가 없어서 파이쪽에서 렌즈의 모든 정보를 일일히 수동으로 처리해야 하는데, 이를 위한 지원이 2023년에 기본으로 비활성화되어서 출시되기 때문에 수동으로 가능하도록 변경해줘야 합니다.

사진과 같은 Camera V2를 가지신 분은 아래 raspi-config 관련 내용은 무시하세요.

저는 Camera v1.3을 갖고 있기 때문에 레거시 카메라 지원을 활성화해야 했습니다. 이전처럼 모든 카메라를 다 쓸 수 있는 대신 더 많은 시스템 자원을 사용하게 될 거에요.

sudo raspi-config

raspi-config

"3. 인터페이스 옵션" 선택

raspi-config

"I1. 레거시 카메라" 활성화

raspi-config

"예" 선택

raspi-config

"확인" 선택

ESC를 두 번 눌러서 메뉴에서 나올 수 있습니다.

테스트

카메라를 활성화했다면 이제 테스트로 mjpg를 출력해볼 차례입니다.

mjpg_streamer -o "output_http.so -w ./www -p 8080" -i "input_raspicam.so" 

기본은 480p@5fps입니다. 주변이 밝고 카메라 렌즈가 좋다면 해상도와 주사율을 올리세요

mjpg_streamer -o "output_http.so -w ./www -p 8080" -i "input_raspicam.so -x 1920 -y 1080 -fps 60"

주의: mjpeg는 네트워크 대역폭을 어마어마하게 소모합니다. 검은 창만 띄워도 15Mbps, 무언가 화면에 보이면 수백 Mbps를 넘어갑니다.

이제 테스트하러 가보죠

http://octopi.local:8080/static.html

설정한 포트와 주소로 들어가시면 테스트 페이지를 보실 수 있습니다.

 설정한 포트의 웹페이지에 카메라 영상이 표시된다면 성공하셨습니다. 영상이 움직이지 않더라도 당황하지 마세요

http://octopi.local:8080/?action=stream 

이 주소로 들어가면 움직이는 영상을 볼 수 있습니다.

서비스 등록

잘 작동한다면 이제 부팅할 때 자동으로 실행되도록 설정해봅시다.

서비스를 하나 만들게요

sudo nano /etc/init.d/mjpg_streamer

아래 내용으로 작성해주세요.

저는 경로가 /home/kamilake/mjpg-streamer/mjpg-streamer-experimental이기 때문에 절대 경로를 서비스 스트립트에 박아놨는데, 여러분은 여러분의 경로로 바꿔주셔야 합니다.

아래 파일은 /etc/init.d/ 폴더 속에 mjpg_streamer라는 이름으로 새로 만들어야 합니다.

#!/bin/bash

# original: phillips321.co.uk
# modified: Kamilake
### BEGIN INIT INFO
# Provides:          mjpg_streamer.sh
# Required-Start:    $network
# Required-Stop:     $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: 
# Description:       
### END INIT INFO

f_message(){
        echo "[+] $1"
}

start() {
  pid=$(mjpg_streamer_pid)
  mjpg_location="/home/kamilake/mjpg-streamer/mjpg-streamer-experimental"
  if [ -n "$pid" ] 
  then
    echo "mjpg_streamer is already running (pid: $pid)"
  else
    # Start mjpg_streamer
		f_message "Starting mjpg_streamer"
		# /home/kamilake/mjpg-streamer/mjpg-streamer-experimental/mjpg_streamer -b -o "/home/kamilake/mjpg-streamer/mjpg-streamer-experimental/output_http.so -w ./www -p 8080" -i "/home/kamilake/mjpg-streamer/mjpg-streamer-experimental/input_raspicam.so -x 1280 -y 720 -fps 15"
    $mjpg_location/mjpg_streamer -b -o "$mjpg_location/output_http.so -w $mjpg_location/www -p 8080" -i "$mjpg_location/input_raspicam.so -x 1280 -y 720 -fps 15"

		sleep 2
		f_message "mjpg_streamer started"
  fi

  return 0
}

stop() {
  kill -9 $(ps -ef | awk '$8=="mjpg_streamer" {print $2}')
  kill -9 $(ps -ef | awk '$8=="/home/kamilake/mjpg-streamer/mjpg-streamer-experimental/mjpg_streamer" {print $2}')
  return 0
}

case "$1" in
        start)
                 start
                 ;;
        stop)
                 stop
                 ;;
        restart)
                 stop
                 sleep 2
                 start
                 ;;
        status)
                pid=`ps -A | grep mjpg_streamer | grep -v "grep" | grep -v mjpg_streamer. | awk '{print $1}' | head -n 1`
                if [ -n "$pid" ];
                then
                        f_message "mjpg_streamer is running with pid ${pid}"
                        f_message "mjpg_streamer was started with the following command line"
                        cat /proc/${pid}/cmdline ; echo ""
                else
                        f_message "Could not find mjpg_streamer running"
                fi
                ;;
        *)
                f_message "Usage: $0 {start|stop|status|restart}"
                exit 1
                ;;
esac
exit 0

저장하셨다면 서비스로 등록하고 활성화해줍시다.

sudo chmod u+x /etc/init.d/mjpg_streamer

sudo update-rc.d mjpg_streamer defaults

등록하셨다면 활성화해주세요.

sudo service mjpg_streamer start

 

자동 실행

시작할 때 켜지게 하고 싶다면 systemd-sysv-install 명령을 사용하면 됩니다.

sudo /lib/systemd/systemd-sysv-install enable mjpg_streamer

 

설치 완료

이것으로, 최신 라즈베리 파이 OS에서 레거시 카메라를 스트리밍하기 위한 모든 설정을 마쳤습니다.

이 글이 도움이 되었기를 바랍니다.