User Tools

Site Tools


projects:farmrobot:steuerungs-kamera

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
projects:farmrobot:steuerungs-kamera [2021/02/26 16:34]
nicolas-leon raspberry pi setup
projects:farmrobot:steuerungs-kamera [2021/03/14 17:51] (current)
jonas [Authors]
Line 1: Line 1:
-====== FPV Camera =====+====== FPV Camera ======
  
 The FPV Camera serves a video stream as the first person view (FPV) of the Robot. This makes it possible to see the position of the Robot and anything in its way. The FPV Camera serves a video stream as the first person view (FPV) of the Robot. This makes it possible to see the position of the Robot and anything in its way.
  
-==== Hardware ====+===== Hardware =====
  
-A 3d Printed mount for the bosh40x40 profile was made to stick a polie on it so that the camera gets a better view. The camera is set in a case which was designed with a litte roof to prevent raindrops on the lense.+A 3d Printed mount for the Bosch40x40 profile was made to stick a polie on it so that the camera gets a better view. The camera is set in a case which was designed with a litte roof to prevent raindrops on the lense.
  
-[picture of 40x40 clip and camera case]+{{:projects:farmrobot:img_2648.jpg?400|}} 
 + 
 +[picture of 40x40 clip with pole and camera case(n/a)]
  
 The following hardware is used for capturing and broadcasting the video stream: The following hardware is used for capturing and broadcasting the video stream:
   * Raspberry Pi 4B (8GB) by element14   * Raspberry Pi 4B (8GB) by element14
-  * Raspberry Pi CSI camera NoIR+  * element14 Raspberry Pi CSI camera v.2 NoIR
   * USB-C cable   * USB-C cable
   * Heatsinks   * Heatsinks
Line 18: Line 20:
   * SD-Card   * SD-Card
  
-==== Software ====+===== Software =====
  
 The SD-Card has been flashed with an Ubuntu 20.10 arm64-raspi OS. The SD-Card has been flashed with an Ubuntu 20.10 arm64-raspi OS.
Line 24: Line 26:
   * user name: pi   * user name: pi
   * password: farmrobot   * password: farmrobot
 +
 Its connectable via ethernet or build in wifi module. Its connectable via ethernet or build in wifi module.
  
Line 33: Line 36:
  
 ''sudo nano /boot/firmware/config.txt [gpu_mem=512 ; start_x=1]'' ''sudo nano /boot/firmware/config.txt [gpu_mem=512 ; start_x=1]''
 +
 +==== Setup ====
 +
 +  sudo apt install v4l-utils
 +  sudo apt install ffmpeg
 +  sudo apt install openssh-server sudo ufw allow ssh ssh pi@farmrobot
 +  
 +=== ffmpeg stream ===
 +Bash script ''stream.sh'':
 +  ffmpeg -f v4l2 -input_format h264 -video_size 852x480 -framerate 5 -i /dev/video0>
 +  -c:v h264 -preset veryfast -b:v 500k -maxrate 500k -bufsize 10k \
 +  -pix_fmt yuv420p -g 10 \
 +  -f flv "rtmp://ingest_server/streamkey" 
 +
 +
 +==== Optional v4l2m2m encoder on arm 64 bit OS ====
  
 Using v4l2m2m encoder to have arm64 hardware support to efficiently encode a efficient h.265 stream which is sent via rtmp to a server which reencodes to hls to view video stream in a browser. Using v4l2m2m encoder to have arm64 hardware support to efficiently encode a efficient h.265 stream which is sent via rtmp to a server which reencodes to hls to view video stream in a browser.
  
-ffmpeg is used for data conversion:+Building ffmpeg from source for the newest release and support for v4l_m2m hardware encoding on 64 bit arm.
  
-''cd/home/pi/ mkdir -p ~/ffmpeg_sources ~/ffmpeg_build mkdir -p ~/bin''+''cd/home/pi/ mkdir -p ~/ffmpeg_sources ~/ffmpeg_build ~/bin''
  
 (installing to /home/pi/bin/ to avoid conflicts with the system package folder) (installing to /home/pi/bin/ to avoid conflicts with the system package folder)
Line 44: Line 63:
 According to [[https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu]] a lot of dependancies have to be installed beforehand: According to [[https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu]] a lot of dependancies have to be installed beforehand:
  
-''sudo apt-get update -qq && sudo apt-get -y install \+  sudo apt-get update -qq && sudo apt-get -y install \
   autoconf \   autoconf \
   automake \   automake \
Line 68: Line 87:
   yasm \   yasm \
   zlib1g-dev \   zlib1g-dev \
-  libunistring-dev''+  libunistring-dev 
 +   
 +installing libaries, chosing wich are needed: 
 +   
 +NASM (An assembler used by some libraries.)  
 +   
 +  cd ~/ffmpeg_sources && 
 +  wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.bz2 && 
 +  tar xjvf nasm-2.15.05.tar.bz2 && 
 +  cd nasm-2.15.05 && 
 +  ./autogen.sh && 
 +  PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && 
 +  make -j 4 && 
 +  make install 
 + 
 +libx264 (H.264 video encoder, fallback)  
 +   
 +  cd ~/ffmpeg_sources && 
 +  git -C x264 pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/x264.git && 
 +  cd x264 && 
 +  PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-pic && 
 +  PATH="$HOME/bin:$PATH" make -j 4 && 
 +  make install 
 + 
 +libx265 (H.265/HEVC video encoder)  
 + 
 +  sudo apt-get install libnuma-dev && 
 +  cd ~/ffmpeg_sources && 
 +  git -C x265_git pull 2> /dev/null || git clone https://bitbucket.org/multicoreware/x265_git && 
 +  cd x265_git/build/linux && 
 +  PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source && 
 +  PATH="$HOME/bin:$PATH" make -j 4 && 
 +  make install 
 + 
 +libvpx (VP8/VP9 video encoder/decoder, another efficient video encoder, needs testing)  
 +   
 +  cd ~/ffmpeg_sources && 
 +  git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && 
 +  cd libvpx && 
 +  PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && 
 +  PATH="$HOME/bin:$PATH" make -j 4 && 
 +  make install 
 + 
 +libaom (AV1 video encoder/decoder)  
 + 
 +  cd ~/ffmpeg_sources && 
 +  git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom && 
 +  mkdir -p aom_build && 
 +  cd aom_build && 
 +  PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off -DENABLE_NASM=on ../aom && 
 +  PATH="$HOME/bin:$PATH" make -j 4 && 
 +  make install 
 + 
 +libsvtav (AV1 video encoder/decoder)  
 + 
 +  cd ~/ffmpeg_sources && 
 +  git -C SVT-AV1 pull 2> /dev/null || git clone https://gitlab.com/AOMediaCodec/SVT-AV1.git && 
 +  mkdir -p SVT-AV1/build && 
 +  cd SVT-AV1/build && 
 +  PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DCMAKE_BUILD_TYPE=Release -DBUILD_DEC=OFF -DBUILD_SHARED_LIBS=OFF .. && 
 +  PATH="$HOME/bin:$PATH" make -j 4 && 
 +  make install 
 + 
 +libdav1d (AV1 decoder, much faster than the one provided by libaom Users whose distributions don't provide a recent enough version of meson (0.49.0 or newer) will need to install a more up-to-date version. This is easily done via the Python Package Index:  
 +''sudo apt-get install python3-pip && pip3 install --user meson'' 
 + 
 +  cd ~/ffmpeg_sources && 
 +  git -C dav1d pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/dav1d.git && 
 +  mkdir -p dav1d/build && 
 +  cd dav1d/build && 
 +  meson setup -Denable_tools=false -Denable_tests=false --default-library=static .. --prefix "$HOME/ffmpeg_build" --bindir="$HOME/bin" --libdir="$HOME/ffmpeg_build/lib" && 
 +  ninja && 
 +  ninja install 
 + 
 +Audio libaries are probably needed for building, especially libfdk_aac for vpx libfdk-aac (AAC audio encoder)  
 + 
 +  cd ~/ffmpeg_sources && 
 +  git -C fdk-aac pull 2> /dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac && 
 +  cd fdk-aac && 
 +  autoreconf -fiv && ./configure --prefix="$HOME/ffmpeg_build" --disable-shared && 
 +  make -j 4 && 
 +  make install 
 + 
 +libmp3lame libopus 
 + 
 +Building FFmpeg  
 + 
 +  cd ~/ffmpeg_sources && 
 +  wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && 
 +  tar xjvf ffmpeg-snapshot.tar.bz2 && 
 +  cd ffmpeg && 
 +  PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure 
 +  --prefix="$HOME/ffmpeg_build" 
 +  --pkg-config-flags="--static" 
 +  --extra-cflags="-I$HOME/ffmpeg_build/include" 
 +  --extra-ldflags="-L$HOME/ffmpeg_build/lib" 
 +  --extra-libs="-lpthread -lm" 
 +  --bindir="$HOME/bin" 
 +  --enable-gpl 
 +  --arch=aarch64 
 +  --enable-gnutls 
 +  --enable-libaom 
 +  --enable-libsvtav1 
 +  --enable-libdav1d 
 +  --enable-libvpx 
 +  --enable-libx264 
 +  --enable-libx265 
 +  --enable-nonfree && 
 +  PATH="$HOME/bin:$PATH" make -j 4 && 
 +  make install && 
 +  hash -r 
 +   
 +  source ~/.profile 
 + 
 +===== Authors ===== 
 +* Jonas Geßmann, Environment & Energy, jonas.gessmann@protonmail.com \\ 
 +* Nicolas Wiehe
projects/farmrobot/steuerungs-kamera.1614357289.txt.gz · Last modified: 2021/02/26 16:34 by nicolas-leon