728x90

출처

환영메시지

[Next] 버튼 선택

이전 설정값 복원

이전 설정값 파일이 없으므로, [Next] 버튼 선택

Linux 터미널 가능한 사용자 설정

Username, Password 입력하고 [Keep Access Control Enable] 버튼을 선택하고, [Next] 버튼 선택

[Enable Anonymous Usage Tracking] 버튼을 선택하고, [Next] 버튼 선택

[Enable Connectivity Check] 버튼을 선택하고, [Next] 버튼 선택

[Enable Plugin Blacklist Processing] 버튼을 선택하고, [Next] 버튼 선택

3D 프린터 설정

Name, Model을 입력하고 [Print bed bduild volume] 선택

Width, Depth, Height 값을 입력하고, [Axes] 선택

  • Width : 220
  • Depth : 220
  • Height : 300

특별하게 설정 없이, [Hotend & extruder] 선택

[Next] 버튼 선택

서버 명령 설정

Restart OctoPrint, Restart system, Shutdown system 값을 입력하고, [Next] 버튼 선택

  • Restart OctoPrint : sudo service octoprint restart
  • Restart system : sudo shutdown -r now
  • Shutdown system : sudo shutdown -h now

웹캠, 타임랩스 저장 설정

Stream URL 입력하고, [Test] 버튼 선택

Stream test 창에서 카메라의 영상을 확인하고, [Close] 버튼 선택

Snapshot URL 입력하고, [Test] 버튼 선택

Snapshot test 창에서 카메라의 이미지를 확인하고, [Close] 버튼 선택

Path to FFMPEG 입력하고, [Test] 버튼 선택

The path is valid 메시지 확인 하고, [Next] 버튼 선택

모든 설정을 마무리하고, [Finish] 버튼 선택

설정된 값을 적용하고 초기화 하기 위해서 [Reload now] 버튼 선택

728x90
728x90

출처

OS 업데이트

$ sudo apt-get update $ sudo apt-get upgrade

파이썬 설치

OctoPrint 는 파이썬 환경에서 실행되므로 파이썬을 설치합니다.

$ sudo apt-get install python-pip python-dev python-setuptools python-virtualenv git libyaml-dev build-essential

OctoPrint 설치

OctoPrint 작업 디렉토리 생성

$ mkdir OctoPrint

OctoPrint 가상환경 생성, pip 최신버전으로 업그레이드

pi@raspberrypi:~$ cd OctoPrint
pi@raspberrypi:~/OctoPrint$ virtualenv venv
Running virtualenv with interpreter /usr/bin/python2
New python executable in /home/pi/OctoPrint/venv/bin/python2
Also creating executable in /home/pi/OctoPrint/venv/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
pi@raspberrypi:~/OctoPrint$ source venv/bin/activate
(venv) pi@raspberrypi:~/OctoPrint$ pip install pip --upgrade

OctoPrint 설치

(venv) pi@raspberrypi:~/OctoPrint$ pip install https://get.octoprint.org/latest
  
<생략>
 
Successfully built OctoPrint markupsafe tornado regex Flask-Babel Flask-Assets cachelib PyYAML watchdog sarge netifaces pylru psutil feedparser future wrapt emoji frozendict blinker scandir chainmap webassets pathtools
Installing collected packages: OctoPrint-FirmwareCheck, OctoPrint-FileCheck, markupsafe, futures, six, singledispatch, backports-abc, tornado, markdown, pyasn1, rsa, regex, Click, werkzeug, itsdangerous, Jinja2, flask, Flask-Login, pytz, Babel, Flask-Babel, webassets, Flask-Assets, cachelib, PyYAML, pyserial, contextlib2, scandir, pathlib2, typing, zipp, importlib-resources, netaddr, pathtools, watchdog, sarge, netifaces, pylru, pkginfo, urllib3, certifi, chardet, idna, requests, semantic-version, psutil, feedparser, future, websocket-client, wrapt, emoji, frozendict, sentry-sdk, filetype, unidecode, blinker, monotonic, chainmap, OctoPrint
Successfully installed Babel-2.8.0 Click-7.1.2 Flask-Assets-2.0 Flask-Babel-1.0.0 Flask-Login-0.5.0 Jinja2-2.11.2 OctoPrint-1.4.2 OctoPrint-FileCheck-2020.8.7 OctoPrint-FirmwareCheck-2020.9.23 PyYAML-5.3.1 backports-abc-0.5 blinker-1.4 cachelib-0.1.1 certifi-2020.6.20 chainmap-1.0.3 chardet-3.0.4 contextlib2-0.6.0.post1 emoji-0.6.0 feedparser-5.2.1 filetype-1.0.7 flask-1.1.2 frozendict-1.2 future-0.18.2 futures-3.3.0 idna-2.10 importlib-resources-3.0.0 itsdangerous-1.1.0 markdown-3.1.1 markupsafe-1.1.1 monotonic-1.5 netaddr-0.8.0 netifaces-0.10.9 pathlib2-2.3.5 pathtools-0.1.2 pkginfo-1.5.0.1 psutil-5.7.2 pyasn1-0.4.8 pylru-1.2.0 pyserial-3.4 pytz-2020.1 regex-2020.9.27 requests-2.24.0 rsa-4.0 sarge-0.1.5.post0 scandir-1.10.0 semantic-version-2.8.5 sentry-sdk-0.18.0 singledispatch-3.4.0.3 six-1.15.0 tornado-5.1.1 typing-3.7.4.3 unidecode-0.4.21 urllib3-1.25.10 watchdog-0.10.3 webassets-2.0 websocket-client-0.57.0 werkzeug-1.0.1 wrapt-1.12.1 zipp-1.2.0

pi 계정 권한 변경

pi 계정에 터미널과 시리얼 접근권한을 추가해서 옥토프린트가 3D 프린터를 컨트롤할 수 있도록 합니다.

pi@raspberrypi:~$ sudo usermod -a -G tty pi
pi@raspberrypi:~$ sudo usermod -a -G dialout pi

OctoPrint 서버 수동실행

pi@raspberrypi:~$ ~/OctoPrint/venv/bin/octoprint serve
2020-10-07 01:47:15,436 - octoprint.startup - INFO - ******************************************************************************
2020-10-07 01:47:15,438 - octoprint.startup - INFO - Starting OctoPrint 1.4.2
2020-10-07 01:47:15,438 - octoprint.startup - INFO - ******************************************************************************
2020-10-07 01:47:15,444 - octoprint.util.connectivity.connectivity_checker - INFO - Connectivity state is currently: online
2020-10-07 01:47:15,445 - octoprint.util.connectivity.connectivity_checker - INFO - Connecting to 8.8.8.8:53 is working
2020-10-07 01:47:15,446 - octoprint.util.connectivity.connectivity_checker - INFO - Resolving octoprint.org is working
 
<생략>
 
2020-10-07 01:47:17,481 - octoprint.environment - INFO - Detected environment is Python 2.7.16 under Linux (linux2). Details:
|  hardware:
|      cores: 4
|      freq: 1500.0
|      ram: 3960000512
|  os:
|      id: linux
|      platform: linux2
|  plugins:
|      pi_support:
|          model: Raspberry Pi 4 Model B Rev 1.1
|  python:
|      pip: 20.2.3
|      version: 2.7.16
|      virtualenv: /home/pi/OctoPrint/venv
 
<생략>
 

OctoPrint 접속

OctoPrint 서버 자동실행

pi@raspberrypi:~$ wget https://github.com/foosel/OctoPrint/raw/master/scripts/octoprint.init
pi@raspberrypi:~$ sudo mv octoprint.init /etc/init.d/octoprint
pi@raspberrypi:~$ wget https://github.com/foosel/OctoPrint/raw/master/scripts/octoprint.default
pi@raspberrypi:~$ sudo mv octoprint.default /etc/default/octoprint
pi@raspberrypi:~$ sudo chmod +x /etc/init.d/octoprint

OctoPrint 서비스 등록

$ sudo update-rc.d octoprint defaults

OctoPrint 서버 환경설정 (/etc/default/octoprint)

pi@raspberrypi:~$ vi /etc/default/octoprint

16번줄의 DAEMON 앞에 주석(#)를 제거, DAEMON 파일 경로도 정확한지 확인하고 저장합니다.

# Configuration for /etc/init.d/octoprint

# The init.d script will only run if this variable non-empty.
OCTOPRINT_USER=pi

# base directory to use
#BASEDIR=/home/pi/.octoprint

# configuration file to use
#CONFIGFILE=/home/pi/.octoprint/config.yaml

# On what port to run daemon, default is 5000
PORT=5000

# Path to the OctoPrint executable, you need to set this to match your installation!
DAEMON=/home/pi/OctoPrint/venv/bin/octoprint

# What arguments to pass to octoprint, usually no need to touch this
DAEMON_ARGS="--port=$PORT"

# Umask of files octoprint generates, Change this to 000 if running octoprint as its own, separate user
UMASK=022

# Process priority, 0 here will result in a priority 20 process.
# -2 ensures Octoprint has a slight priority over user processes.
NICELEVEL=-2

# Should we run at startup?
START=yes
728x90
728x90

출처

기존에 설치되어 있는 ffmpeg 삭제, ffmpeg 컴파일 관련 패키지 설치

pi@raspberrypi:~$ sudo apt-get remove ffmpeg x264 libav-tools libvpx-dev libx264-dev yasm
pi@raspberrypi:~$ sudo apt-get update
pi@raspberrypi:~$ sudo apt-get -y install autoconf automake build-essential checkinstall git libass-dev \
   libgpac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libspeex-dev \
   libtheora-dev libtool libvorbis-dev pkg-config texi2html zlib1g-dev

yasm 소스 다운로드, 컴파일

pi@raspberrypi:~$ mkdir ~/workspace.ffmpeg
pi@raspberrypi:~$ cd ~/workspace.ffmpeg
pi@raspberrypi:~/workspace.ffmpeg$ wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
pi@raspberrypi:~/workspace.ffmpeg$ tar xzvf yasm-1.2.0.tar.gz && cd yasm-1.2.0
pi@raspberrypi:~/workspace.ffmpeg/yasm-1.2.0$ ./configure && make
pi@raspberrypi:~/workspace.ffmpeg/yasm-1.2.0$ sudo make install

lame 소스 다운로드, 컴파일

pi@raspberrypi:~$ cd ~/workspace.ffmpeg
pi@raspberrypi:~/workspace.ffmpeg$ wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.tar.gz
pi@raspberrypi:~/workspace.ffmpeg$ tar xzvf lame-3.99.tar.gz && cd lame-3.99
pi@raspberrypi:~/workspace.ffmpeg/lame-3.99$ ./configure && make
pi@raspberrypi:~/workspace.ffmpeg/lame-3.99$ sudo make install

faac 소스 다운로드, 컴파일 (ffmpeg가 최신버전의 경우 불필요한 라이브러리)

pi@raspberrypi:~$ cd ~/workspace.ffmpeg
pi@raspberrypi:~/workspace.ffmpeg$ wget https://sourceforge.net/projects/faac/files/faac-src/faac-1.29/faac-1.29.9.2.tar.gz
pi@raspberrypi:~/workspace.ffmpeg$ tar xzvf faac-1.29.9.2.tar.gz && cd faac-1.29.9.2
pi@raspberrypi:~/workspace.ffmpeg/faac-1.29.9.2$ ./configure && make
pi@raspberrypi:~/workspace.ffmpeg/faac-1.29.9.2$ sudo make install

fdk-aac 소스 다운로드, 컴파일

pi@raspberrypi:~$ cd ~/workspace.ffmpeg
pi@raspberrypi:~/workspace.ffmpeg$ git clone --depth 1 git://github.com/mstorsjo/fdk-aac.git
pi@raspberrypi:~/workspace.ffmpeg$ cd fdk-aac/
pi@raspberrypi:~/workspace.ffmpeg/fdk-aac$ autoreconf -fiv
pi@raspberrypi:~/workspace.ffmpeg/fdk-aac$ ./configure --disable-shared
pi@raspberrypi:~/workspace.ffmpeg/fdk-aac$ make
pi@raspberrypi:~/workspace.ffmpeg/fdk-aac$ sudo make install

H264 소스 다운로드, 컴파일

pi@raspberrypi:~$ cd ~/workspace.ffmpeg
pi@raspberrypi:~/workspace.ffmpeg$ git clone https://code.videolan.org/videolan/x264.git
pi@raspberrypi:~/workspace.ffmpeg$ cd x264
pi@raspberrypi:~/workspace.ffmpeg/x264$ ./configure --enable-static
platform:       ARM
byte order:     little-endian
system:         LINUX
cli:            yes
libx264:        internal
shared:         no
static:         yes
bashcompletion: yes
asm:            yes
interlaced:     yes
avs:            avxsynth
lavf:           no
ffms:           no
mp4:            no
gpl:            yes
thread:         posix
opencl:         yes
filters:        crop select_every
lto:            no
debug:          no
gprof:          no
strip:          no
PIC:            no
bit depth:      all
chroma format:  all
 
You can run 'make' or 'make fprofiled' now.
pi@raspberrypi:~/workspace.ffmpeg/x264$ make
pi@raspberrypi:~/workspace.ffmpeg/x264$ sudo make install
install -d /usr/local/bin
install x264 /usr/local/bin
install -d /usr/local/include /usr/local/lib/pkgconfig
install -m 644 ./x264.h x264_config.h /usr/local/include
install -m 644 x264.pc /usr/local/lib/pkgconfig
install -d /usr/local/lib
install -m 644 libx264.a /usr/local/lib
gcc-ranlib /usr/local/lib/libx264.a
install -d /usr/share/bash-completion/completions
install -m 644 -T ./tools/bash-autocomplete.sh /usr/share/bash-completion/completions/x264

ffmpeg 소스 다운로드, 컴파일

pi@raspberrypi:~$ cd ~/workspace.ffmpeg
pi@raspberrypi:~/workspace.ffmpeg$ git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
pi@raspberrypi:~/workspace.ffmpeg$ cd ffmpeg
pi@raspberrypi:~/workspace.ffmpeg/ffmpeg$ ./configure --extra-libs="-ldl" --enable-gpl --enable-libass --enable-libfdk-aac \
   --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libspeex --enable-libtheora \
   --enable-libvorbis --enable-libx264 --enable-nonfree --enable-version3 --extra-ldflags="-latomic"
pi@raspberrypi:~/workspace.ffmpeg/ffmpeg$ make
pi@raspberrypi:~/workspace.ffmpeg/ffmpeg$ sudo make install

ffmpeg 명령 - 이미지 추출

pi@raspberrypi:~$ ffmpeg -f video4linux2 -i /dev/video0 -r 10 -f image2 camera%03d.jpg
ffmpeg version N-99456-g45070eec4c Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 8 (Raspbian 8.3.0-6+rpi1)
  configuration: --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree --enable-version3 --extra-ldflags=-latomic
  libavutil      56. 60.100 / 56. 60.100
  libavcodec     58.108.100 / 58.108.100
  libavformat    58. 59.100 / 58. 59.100
  libavdevice    58. 11.102 / 58. 11.102
  libavfilter     7. 87.100 /  7. 87.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 48460.801672, bitrate: 36864 kb/s
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 640x480, 36864 kb/s, 10 fps, 10 tbr, 1000k tbn, 1000k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 0x2944ec0] deprecated pixel format used, make sure you did set range correctly
Output #0, image2, to 'camera%03d.jpg':
  Metadata:
    encoder         : Lavf58.59.100
    Stream #0:0: Video: mjpeg, yuvj420p(pc), 640x480, q=2-31, 200 kb/s, 10 fps, 10 tbn, 10 tbc
    Metadata:
      encoder         : Lavc58.108.100 mjpeg
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
frame=   24 fps= 10 q=24.8 Lsize=N/A time=00:00:02.40 bitrate=N/A speed=1.02x    
video:404kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Exiting normally, received signal 2.

확인

pi@raspberrypi:~$ ls camera*.jpg
camera001.jpg  camera005.jpg  camera009.jpg  camera013.jpg  camera017.jpg  camera021.jpg
camera002.jpg  camera006.jpg  camera010.jpg  camera014.jpg  camera018.jpg  camera022.jpg
camera003.jpg  camera007.jpg  camera011.jpg  camera015.jpg  camera019.jpg  camera023.jpg
camera004.jpg  camera008.jpg  camera012.jpg  camera016.jpg  camera020.jpg  camera024.jpg

ffmpeg 명령 - flv 포멧으로 동영상 저장

pi@raspberrypi:~$ ffmpeg -f video4linux2 -i /dev/video0 -f flv out.flv
ffmpeg version N-99456-g45070eec4c Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 8 (Raspbian 8.3.0-6+rpi1)
  configuration: --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree --enable-version3 --extra-ldflags=-latomic
  libavutil      56. 60.100 / 56. 60.100
  libavcodec     58.108.100 / 58.108.100
  libavformat    58. 59.100 / 58. 59.100
  libavdevice    58. 11.102 / 58. 11.102
  libavfilter     7. 87.100 /  7. 87.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 48635.919862, bitrate: 36864 kb/s
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 640x480, 36864 kb/s, 10 fps, 10 tbr, 1000k tbn, 1000k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> flv1 (flv))
Press [q] to stop, [?] for help
Output #0, flv, to 'out.flv':
  Metadata:
    encoder         : Lavf58.59.100
    Stream #0:0: Video: flv1 (flv) ([2][0][0][0] / 0x0002), yuv420p, 640x480, q=2-31, 200 kb/s, 10 fps, 1k tbn, 10 tbc
    Metadata:
      encoder         : Lavc58.108.100 flv
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
frame=   46 fps= 10 q=14.1 size=     256kB time=00:00:04.50 bitrate= 465.9kbits/s speed=0.988x   frame=   51 fps= 10 q=19.0 size=     256kB time=00:00:05.00 bitrate= 419.3kbits/s speed=0.989x   frame=   54 fps= 10 q=20.0 Lsize=     346kB time=00:00:05.30 bitrate= 535.2kbits/s speed=0.989x    
video:345kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.304310%
Exiting normally, received signal 2.

ffmpeg 명령 - mp4 파일로 저장

pi@raspberrypi:~$ ffmpeg -f video4linux2 -i /dev/video0 -s 640x480 -r 25 -f mpeg out.mp4
ffmpeg version N-99456-g45070eec4c Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 8 (Raspbian 8.3.0-6+rpi1)
  configuration: --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree --enable-version3 --extra-ldflags=-latomic
  libavutil      56. 60.100 / 56. 60.100
  libavcodec     58.108.100 / 58.108.100
  libavformat    58. 59.100 / 58. 59.100
  libavdevice    58. 11.102 / 58. 11.102
  libavfilter     7. 87.100 /  7. 87.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 49109.741243, bitrate: 36864 kb/s
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 640x480, 36864 kb/s, 10 fps, 10 tbr, 1000k tbn, 1000k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> mpeg1video (native))
Press [q] to stop, [?] for help
[mpeg @ 0x22224d0] VBV buffer size not set, using default size of 230KB
If you want the mpeg file to be compliant to some specification
Like DVD, VCD or others, make sure you set the correct buffer size
Output #0, mpeg, to 'out.mp4':
  Metadata:
    encoder         : Lavf58.59.100
    Stream #0:0: Video: mpeg1video, yuv420p, 640x480, q=2-31, 200 kb/s, 25 fps, 90k tbn, 25 tbc
    Metadata:
      encoder         : Lavc58.108.100 mpeg1video
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
frame=   14 fps=0.0 q=8.3 size=     130kB time=00:00:00.44 bitrate=2420.3kbits/s dup=8 drop=0 speframe=   27 fps= 26 q=8.1 size=     162kB time=00:00:00.96 bitrate=1382.4kbits/s dup=16 drop=0 spframe=   39 fps= 25 q=10.5 size=     192kB time=00:00:01.44 bitrate=1092.3kbits/s dup=23 drop=0 sframe=   52 fps= 25 q=11.9 size=     224kB time=00:00:01.96 bitrate= 936.2kbits/s dup=31 drop=0 sframe=   59 fps= 25 q=9.8 Lsize=     232kB time=00:00:02.28 bitrate= 833.6kbits/s dup=35 drop=0 speed=0.948x    
video:229kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.153889%
Exiting normally, received signal 2.
728x90
728x90

출처

MJPG streamer 컴파일 관련 라이브러리 설치

pi@raspberrypi:~$ sudo apt update
pi@raspberrypi:~$ sudo apt upgrade 
pi@raspberrypi:~$ sudo apt-get install cmake libjpeg9-dev imagemagick libv4l-dev libgphoto2-dev

MJPG streamer 소스 다운로드, 컴파일, 설치

pi@raspberrypi:~$ git clone https://github.com/jacksonliam/mjpg-streamer.git
pi@raspberrypi:~$ cd mjpg-streamer/mjpg-streamer-experimental/
pi@raspberrypi:~/mjpg-streamer/mjpg-streamer-experimental$ make
pi@raspberrypi:~/mjpg-streamer/mjpg-streamer-experimental$ sudo make install

LD_LIBRARY_PATH 경로 추가

pi@raspberrypi:~$ echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/lib/mjpg-streamer" | sudo tee -a /etc/profile

MJPG Streamer 수동 실행

출처 : MJPG Streamer configuration

pi@raspberrypi:~$ mjpg_streamer -i "input_raspicam.so -x 640 -y 480 -fps 10 -rot 180 -ex night" --output "output_http.so -w /usr/local/share/mjpg-streamer/www --port 4998"
MJPG Streamer Version: git rev: 85f89a8c321e799fabb1693c5d133f3fb48ee748
 i: fps.............: 10
 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 'night', AWB Mode 'auto', Image Effect 'none'
Metering Mode 'average', Colour Effect Enabled No with U = 128, V = 128
Rotation 180, hflip No, vflip No
ROI x 0.000000, y 0.000000, w 1.000000 h 1.000000
 o: www-folder-path......: /usr/local/share/mjpg-streamer/www/
 o: HTTP TCP port........: 4998
 o: HTTP Listen Address..: (null)
 o: username:password....: disabled
 o: commands.............: enabled
 i: Starting Camera
Encoder Buffer Size 81920

서비스등록

pi@raspberrypi:~$ sudo vi /etc/init.d/mjpg_streamer

mjpg_streamer 파일 내용

#!/bin/bash
# /etc/init.d/mjpg_streamer.sh
# v0.2 phillips321.co.uk
### 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: mjpg_streamer for webcam
# Description:       Streams /dev/video0 to http://IP/?action=stream
### END INIT INFO

#
export width=640
export height=480
export bitrate=10
export SHUTDOWN_WAIT=2

if [ -n "$2" ]; then
  width=$2 
fi

if [ -n "$3" ]; then
  height=$3
fi

if [ -n "$4" ]; then
  bitrate=$4
fi

export LD_MJPG_STREAMER=/usr/local/lib/mjpg-streamer

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

mjpg_streamer_pid() {
  echo `ps aux | grep mjpg-streamer | grep -v grep | awk '{ print $2 }'`
}

start() {
  pid=$(mjpg_streamer_pid)
  if [ -n "$pid" ] 
  then
    echo "mjpg_streamer is already running (pid: $pid)"
  else
    # Start mjpg_streamer
		f_message "Starting mjpg_streamer"
		mjpg_streamer -b -i "$LD_MJPG_STREAMER/input_uvc.so -r "$width"x"$height" -f $bitrate -y" -o "$LD_MJPG_STREAMER/output_http.so -p 4998 -w /usr/local/share/mjpg-streamer/www"
		sleep 2
		f_message "mjpg_streamer started"
  fi

  return 0
}

stop() {
  pid=$(mjpg_streamer_pid)
  if [ -n "$pid" ]
  then
    f_message "Stopping mjpg_streamer..."
    kill -9 $pid

    let kwait=$SHUTDOWN_WAIT
    let count=0;
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
      echo -n -e "\nwaiting for processes to exit";
      sleep 1
      let count=$count+1;
    done

    if [ $count -gt $kwait ]; then
      echo -n -e "\nkilling processes which didn't stop after $SHUTDOWN_WAIT seconds\n"
      kill -9 $pid
    fi
  else
    echo "mjpg_streamer is not running"
  fi
 
  return 0
}

# Carry out specific functions when asked to by the system
case "$1" in
        start)
                 start
                 ;;
        stop)
                 stop
                 ;;
        restart)
                 stop
                 sleep 2
                 start
                 ;;
        resolution)
                resolution=`ps axu | grep mjpg-streamer | grep -v grep | awk '{ print $16 }'`
                if [ -n "$resolution" ];
                then
                        echo "${resolution}"
                else
                        echo "0x0"
                fi
                ;;
        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

등록

pi@raspberrypi:~$ sudo chmod u+x /etc/init.d/mjpg_streamer
pi@raspberrypi:~$ sudo update-rc.d mjpg_streamer defaults

서비스 실행 및 실행 확인

pi@raspberrypi:~$ sudo service mjpg_streamer start
pi@raspberrypi:~$ sudo service mjpg_streamer status
● mjpg_streamer.service - LSB: mjpg_streamer for webcam
   Loaded: loaded (/etc/init.d/mjpg_streamer; generated)
   Active: active (running) since Fri 2020-10-02 18:06:59 BST; 16s ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 3 (limit: 1942)
   CGroup: /system.slice/mjpg_streamer.service
           └─4761 mjpg_streamer -b -i /usr/local/lib/mjpg-streamer/input_uvc.so -r 640x480 -f 10 -y -o /usr/local/lib/mjpg-streamer/output_http.so -p 4998 -w /usr/local/share/mjpg-streamer/www
 
Oct 02 18:06:57 raspberrypi mjpg_streamer[4761]: MJPG-streamer [4761]: TV-Norm...........: DEFAULT
Oct 02 18:06:57 raspberrypi mjpg_streamer[4761]: MJPG-streamer [4761]: www-folder-path......: /usr/local/share/mjpg-streamer/www/
Oct 02 18:06:57 raspberrypi mjpg_streamer[4761]: MJPG-streamer [4761]: HTTP TCP port........: 4998
Oct 02 18:06:57 raspberrypi mjpg_streamer[4761]: MJPG-streamer [4761]: HTTP Listen Address..: (null)
Oct 02 18:06:57 raspberrypi mjpg_streamer[4761]: MJPG-streamer [4761]: username:password....: disabled
Oct 02 18:06:57 raspberrypi mjpg_streamer[4761]: MJPG-streamer [4761]: commands.............: enabled
Oct 02 18:06:57 raspberrypi mjpg_streamer[4761]: MJPG-streamer [4761]: starting input plugin /usr/local/lib/mjpg-streamer/input_uvc.so
Oct 02 18:06:57 raspberrypi mjpg_streamer[4761]: MJPG-streamer [4761]: starting output plugin: /usr/local/lib/mjpg-streamer/output_http.so (ID: 00)
Oct 02 18:06:59 raspberrypi mjpg_streamer[4751]: [+] mjpg_streamer started
Oct 02 18:06:59 raspberrypi systemd[1]: Started LSB: mjpg_streamer for webcam.

확인

GPU 매모리 늘리기

pi@raspberrypi:~ $ sudo raspi-config

728x90
728x90

출처

라즈베리파이 카메라 활성화

pi@raspberrypi:~ $ sudo raspi-config

카메라 테스트(캡쳐)

pi@raspberrypi:~$ raspistill -v -o test.jpg
 
"raspistill" Camera App (commit f97b1af1b3e6 Tainted)
 
Camera Name imx219
Width 3280, Height 2464, filename test.jpg
Using camera 0, sensor mode 0
 
GPS output Disabled
 
Quality 85, Raw no
Thumbnail enabled Yes, width 64, height 48, quality 35
Time delay 5000, Timelapse 0
Link to latest frame enabled  no
Full resolution preview No
Capture method : Single capture
 
Preview Yes, Full screen Yes
Preview window 0,0,1024,768
Opacity 255
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'
Flicker Avoid Mode 'off'
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
Camera component done
Encoder component done
Starting component connection stage
Connecting camera preview port to video render.
Connecting camera stills port to encoder input port
Opening output file test.jpg
Enabling encoder output port
Starting capture -1
Finished capture -1
Closing down
Close down completed, all components disconnected, disabled and destroyed
728x90

+ Recent posts