In diesem Video teste und installeire ich crowsnest. Crowsnest ist der neue Video Streaming Service für Mainsail der gerade auf Bullseye Raspberry Pi Images deutlich mehr Performance bietet. Zudem gibt es eine erste Preview auf die Weiterentwicklung von crowsnest mit WebRTC. HIer gibt es nochmals eine deutliche Leistungssteigerung bei enorm gesunkenem Datenvolumen was übertragen werden muss.
Wieviel fps (Frames per Second) erreicht werden können hängt von 2 Faktoren ab:
Der erste Punkt ist leicht abgehakt. In Bullseye ist die Hardwarebeschleunigung aktiv, in Buster nicht (aus crowsnest Sicht).
Und die Menge an Daten, die über das Netzwerk gehen kann man folgendermaßen ermitteln:
nload -u M
Das Tool muss erst mittelssudo apt install nload
installiert werden.
Als Ergebnis bekommt man für einen 1920×1080@30fps (Full HD) folgendes Ergebnis (Raspberry Pi 3b):
Kurzum, ein Umstieg auf crowsnest und weg von mjpg-Streamer lohnt
Wer noch Buster als Rapbian Version verwendet, sollte darüber nachdenken, das System neu aufzusetzen. Crowsnest nutzt die Hardwarebeschleunigung M2M unter Bullseye, die in Buster aber (aufgrund des alten Kernels) gar nicht vorhanden ist. Deshalb würde unter Buster und crowsnest alls von der CPU berechnet, was den Videostream betrifft. Erst in Bullseye wird die Hardwarebeschleunigung genutzt.
Die verwendete Version könnt ihr so rausfinden:
Hier ist alles schon komplett vorbereitet im Image. Es ist also keine extra Installation nötig.
crowsnest muss dann installiert werden, wenn man ein normales Raspberry Pi Image verwendet als Basis.
kiauh muss natürlich auf dem System eingerichtet sein !
cd ~/kiauh
./kiauh
basierend auf: https://github.com/mainsail-crew/crowsnest#installation
cd ~
cd ~/crowsnest
sudo make install
nano ~/printer_data/logs/crowsnest.log
Wir müssen folgende Punkte aus dem Log für jede Kamera herausfinden:
Bei mehreren Kameras halt für alle Kameras die Infos ermitteln.
[03/03/23 18:16:37] crowsnest: INFO: Detect available Devices [03/03/23 18:16:37] crowsnest: INFO: Found 1 total available Device(s) [03/03/23 18:16:37] crowsnest: INFO: Found 1 available camera(s) [03/03/23 18:16:37] crowsnest: /dev/v4l/by-id/usb-SIT_USB2.0_Camera_SIT_USB2.0_Camera-video-index0 -> /dev/video0 [03/03/23 18:16:37] crowsnest: Supported Formats: [03/03/23 18:16:37] crowsnest: [0]: 'MJPG' (Motion-JPEG, compressed) [03/03/23 18:16:37] crowsnest: Size: Discrete 2592x1944 [03/03/23 18:16:37] crowsnest: Interval: Discrete 0.067s (15.000 fps) [03/03/23 18:16:37] crowsnest: Size: Discrete 1280x960 [03/03/23 18:16:37] crowsnest: Interval: Discrete 0.067s (15.000 fps) [03/03/23 18:16:37] crowsnest: Size: Discrete 1024x768 [03/03/23 18:16:37] crowsnest: Interval: Discrete 0.033s (30.000 fps) [03/03/23 18:16:37] crowsnest: Size: Discrete 640x480 [03/03/23 18:16:37] crowsnest: Interval: Discrete 0.033s (30.000 fps) [03/03/23 18:16:37] crowsnest: Size: Discrete 1280x720 [03/03/23 18:16:37] crowsnest: Interval: Discrete 0.033s (30.000 fps) [03/03/23 18:16:37] crowsnest: Size: Discrete 1600x1200 [03/03/23 18:16:37] crowsnest: Interval: Discrete 0.067s (15.000 fps) [03/03/23 18:16:37] crowsnest: Size: Discrete 2048x1536 [03/03/23 18:16:37] crowsnest: Interval: Discrete 0.067s (15.000 fps) [03/03/23 18:16:37] crowsnest: Size: Discrete 800x600 [03/03/23 18:16:37] crowsnest: Interval: Discrete 0.033s (30.000 fps) [03/03/23 18:16:37] crowsnest: Size: Discrete 1920x1080 [03/03/23 18:16:38] crowsnest: Interval: Discrete 0.067s (15.000 fps) [03/03/23 18:16:38] crowsnest: [1]: 'YUYV' (YUYV 4:2:2) [03/03/23 18:16:38] crowsnest: Size: Discrete 2592x1944 [03/03/23 18:16:38] crowsnest: Interval: Discrete 0.500s (2.000 fps) [03/03/23 18:16:38] crowsnest: Size: Discrete 1280x960 [03/03/23 18:16:38] crowsnest: Interval: Discrete 0.200s (5.000 fps) [03/03/23 18:16:38] crowsnest: Size: Discrete 1024x768 [03/03/23 18:16:38] crowsnest: Interval: Discrete 0.100s (10.000 fps) [03/03/23 18:16:38] crowsnest: Size: Discrete 640x480 [03/03/23 18:16:38] crowsnest: Interval: Discrete 0.033s (30.000 fps) [03/03/23 18:16:38] crowsnest: Size: Discrete 1280x720 [03/03/23 18:16:38] crowsnest: Interval: Discrete 0.100s (10.000 fps) [03/03/23 18:16:38] crowsnest: Size: Discrete 1600x1200 [03/03/23 18:16:38] crowsnest: Interval: Discrete 0.200s (5.000 fps) [03/03/23 18:16:38] crowsnest: Size: Discrete 2048x1536 [03/03/23 18:16:38] crowsnest: Interval: Discrete 0.500s (2.000 fps) [03/03/23 18:16:38] crowsnest: Size: Discrete 800x600 [03/03/23 18:16:38] crowsnest: Interval: Discrete 0.050s (20.000 fps) [03/03/23 18:16:38] crowsnest: Size: Discrete 1920x1080 [03/03/23 18:16:39] crowsnest: Interval: Discrete 0.500s (2.000 fps)
Die Settings werden in der crowsnest.conf
eingetragen. Erklärungen zu den Parametern gibt es auf der crowsnest github Seite:
https://github.com/mainsail-crew/crowsnest#simple-configuration
Beispiel mit den ermittelten Daten aus dem crowsnest.log:
[cam BedCam] mode: mjpg # mjpg/rtsp port: 8080 # Port device: /dev/v4l/by-id/usb-ICT-TEK_USB_Camera_202001010001-video-index0 resolution: 1920x1080 max_fps: 30
Anschließend muss in Mainsail noch eine Webcam hinzugefügt werden über die Settings (rechts oben die 2 Zahnräder).
Der Adaptive ist als Default sicher nicht die schlechteste Wahl
siehe https://github.com/mainsail-crew/crowsnest#feature-v4l2-control
nano ~/printer_data/logs/crowsnest.log
[03/03/23 18:16:39] crowsnest: Supported Controls: [03/03/23 18:16:39] crowsnest: brightness 0x00980900 (int) : min=0 max=127 step=1 default=0 value=0 [03/03/23 18:16:39] crowsnest: contrast 0x00980901 (int) : min=0 max=255 step=1 default=33 value=33 [03/03/23 18:16:39] crowsnest: saturation 0x00980902 (int) : min=0 max=255 step=1 default=44 value=44 ...
v4l2-ctl -d /dev/video0 -c brightness=100
Beispiel:
#### crowsnest.conf #### This is a typical default config. #### Also used as default in mainsail / MainsailOS #### See: #### https://github.com/mainsail-crew/crowsnest/blob/master/README.md #### for details to configure to your needs. ##################################################################### #### ##### #### Information about ports and according URL's ##### #### ##### ##################################################################### #### ##### #### Port 8080 equals /webcam/?action=[stream/snapshot] ##### #### Port 8081 equals /webcam2/?action=[stream/snapshot] ##### #### Port 8082 equals /webcam3/?action=[stream/snapshot] ##### #### Port 8083 equals /webcam4/?action=[stream/snapshot] ##### #### ##### ##################################################################### [crowsnest] log_path: ~/printer_data/logs/crowsnest.log log_level: verbose # Valid Options are quiet/verbose/debug delete_log: false # Deletes log on every restart, if set to true [cam 1] mode: mjpg # mjpg/rtsp port: 8080 # Port device: /dev/v4l/by-id/usb-SIT_USB2.0_Camera_SIT_USB2.0_Camera-video-index0 resolution: 1280x720 # 1920x1080 # widthxheight format max_fps: 30 # If Hardware Supports this it will be forced, otherwise ignored/coerced. [cam 2] mode: mjpg # mjpg/rtsp port: 8081 # Port device: /dev/v4l/by-id/usb-Novatek_WebCam_130_HD2-video-index0 resolution: 1280x720 # widthxheight format max_fps: 10 # If Hardware Supports this it will be forced, otherwise ignored/coerced.
Hinweise:
sudo apt-get -y install libavformat-dev libavutil-dev libavcodec-dev libcamera-dev liblivemedia-dev v4l-utils pkg-config xxd build-essential cmake libssl-dev
cd ~/crowsnest
git fetch
git checkout origin/feat/ayucamstream
cd bin
git clone https://github.com/ayufan-research/camera-streamer.git --recursive
cd camera-streamer/
git checkout origin/develop
make -j4
Beispiel crowsnest Config
[cam nozzle] mode: multi port: 8080 device: /dev/v4l/by-id/usb-XKL_220922-WYZ_HK_5M_CAM_01.00.00-video-index0 resolution: 1280x720 max_fps: 25
Die folgenden Anleitungen sind nur als Info hier abgelegt. Das wird nur dann benötigt wenn bei der normalen Deinstallation etwas schief geht. In den meisten Fällen wird man aber kaum mjpeg-streamer selber deinstallieren müssen.
Hinweis
Der crowsnest Installer deinstalliert automatisch den mjpeg-streamer!
Ein manueller Eingriff ist also nur im Fehlerfall nötig.
/=======================================================\ | ~~~~~~~~~~~~~~~~~ [ KIAUH ] ~~~~~~~~~~~~~~~~~ | | Klipper Installation And Update Helper | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | \=======================================================/ /=======================================================\ | ~~~~~~~~~~~~~~ [ Remove Menu ] ~~~~~~~~~~~~~~ | |-------------------------------------------------------| | INFO: Configurations and/or any backups will be kept! | |-------------------------------------------------------| | Firmware & API: | 3rd Party Webinterface: | | 1) [Klipper] | 8) [OctoPrint] | | 2) [Moonraker] | | | | Webcam Streamer: | | Klipper Webinterface: | 9) [Crowsnest] | | 3) [Mainsail] | 10) [MJPG-Streamer] | | 4) [Mainsail-Config] | | | 5) [Fluidd] | Other: | | 6) [Fluidd-Config] | 11) [PrettyGCode] | | | 12) [Telegram Bot] | | Touchscreen GUI: | 13) [Obico for Klipper] | | 7) [KlipperScreen] | 14) [NGINX] | |-------------------------------------------------------| | B) « Back | \=======================================================/
Hinweis
Der crowsnest Installer deinstalliert automatisch den mjpeg-streamer!
Ein manueller Eingriff ist also nur im Fehlerfall nötig.
sudo systemctl status webcamd.service
pi@Make-Voron2:~/printer_data/logs $ sudo systemctl status webcamd.service ● webcamd.service - the MainsailOS webcam daemon (based on OctoPi) with the user specified config Loaded: loaded (/etc/systemd/system/webcamd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-11-29 09:04:30 CET; 3 months 2 days ago Main PID: 533 (mjpg_streamer) Tasks: 3 (limit: 3596) CGroup: /system.slice/webcamd.service └─533 ./mjpg_streamer -o output_http.so -w ./www-mjpgstreamer -n -i input_uvc.so -r 1280x1024 -f 25 -d /dev/video0
sudo systemctl stop webcamd.service
sudo systemctl disable webcamd.service
cd ~ && rm -rf mjpg-streame
sudo rm /usr/local/bin/webcamd
sudo rm /var/log/webcamd.log
sudo rm ~/printer_data/logs/webcamd.log
→ Link !