This page deals mostly with USB devices as input. The software tested can also handle the built in Raspberry Cam. See the two comment chat groups above for the projects in which a webcam are used. Another usecase is OctoPrint
This page deals mostly with USB devices as input. The software tested can also handle the built in Raspberry Cam. See the two comment chat groups above for the projects in which a webcam are used. Another usecase is OctoPrint
The tests were done with two different Logitech USB Webcams on different Raspberry PI devices. A Raspberry 3B+ and a Raspberry 4 using raspbian buster.
lsusb | grep cam
Bus 001 Device 005: ID 046d:0825 Logitech, Inc. Webcam C270
lsusb
Bus 001 Device 004: ID 046d:082c Logitech, Inc. HD Webcam C615
dmesg | grep uvcvideo | head -1
[ 4.538065] uvcvideo: Found UVC 1.00 device HD Webcam C615 (046d:082c)
v4l2-ctl -V
Format Video Capture:
Width/Height : 352/288
Pixel Format : 'MJPG' (Motion-JPEG)
Field : None
Bytes per Line : 0
Size Image : 102400
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Full Range)
Flags :
The tests were done with two different Logitech USB Webcams on different Raspberry PI devices. A Raspberry 3B+ and a Raspberry 4 using raspbian buster.
lsusb | grep cam
Bus 001 Device 005: ID 046d:0825 Logitech, Inc. Webcam C270
lsusb
Bus 001 Device 004: ID 046d:082c Logitech, Inc. HD Webcam C615
dmesg | grep uvcvideo | head -1
[ 4.538065] uvcvideo: Found UVC 1.00 device HD Webcam C615 (046d:082c)
v4l2-ctl -V
Format Video Capture:
Width/Height : 352/288
Pixel Format : 'MJPG' (Motion-JPEG)
Field : None
Bytes per Line : 0
Size Image : 102400
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Full Range)
Flags :
see https://wiki.ubuntuusers.de/Videograbbing/
sudo apt-get install qv4l2
qv4l2
see https://wiki.ubuntuusers.de/Videograbbing/
sudo apt-get install qv4l2
qv4l2
sudo apt-get install fswebcam
fswebcam test.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'test.jpg'.
#!/bin/bash
server=pichess
pic=chess$$.jpg
resolution=640x480
# https://raspberrypi.stackexchange.com/a/29284/11220 - skip some frames to adjust exposure
ssh $server fswebcam -r $resolution -S 10 -d /dev/video0 /tmp/$pic
scp $server:/tmp/$pic /tmp/$pic
open /tmp/$pic
Motion can be used to stream the camera images over the network. Motion is used for detecting movements and reacting on those movements. This needs extra CPU power so the solution is slower than others.
sudo apt-get install motion
cd /etc/motion
git init
git add *
git commit -a -m "initial checkin"
# edit motion.conf with your favorite editor
git diff motion.conf
diff --git a/motion.conf b/motion.conf
index 23c8810..b96df83 100644
--- a/motion.conf
+++ b/motion.conf
@@ -8,7 +8,7 @@
############################################################
# Start in daemon (background) mode and release terminal (default: off)
-daemon off
+daemon on
# File to store the process ID, also called pid file. (default: not defined)
process_id_file /var/run/motion/motion.pid
@@ -76,14 +76,14 @@ rotate 0
flip_axis none
# Image width (pixels). Valid range: Camera dependent, default: 320
-width 320
+width 352
# Image height (pixels). Valid range: Camera dependent, default: 240
-height 240
+height 288
# Maximum number of frames to be captured per second.
# Valid range: 2-100. Default: 100 (almost no limit).
-framerate 2
+framerate 30
# Minimum time in seconds between capturing picture frames from the camera.
# Default: 0 = disabled - the capture rate is given by the camera framerate.
@@ -458,7 +458,7 @@ stream_motion off
stream_maxrate 1
# Restrict stream connections to localhost only (default: on)
-stream_localhost on
+stream_localhost off
# Limits the number of images per connection (default: 0 = unlimited)
# Number can be defined by multiplying actual stream rate by desired number of seconds
# fix /etc/default/motion
cat /etc/default/motion
# set to 'yes' to enable the motion daemon
start_motion_daemon=yes
see https://github.com/jacksonliam/mjpg-streamer
cd /usr/local/lib
sudo -s
git clone https://github.com/jacksonliam/mjpg-streamer
apt-get install -y cmake libjpeg8-dev
cd mjpg-streamer/mjpg-streamer-experimental
make
make install
./mjpg_streamer -i input_uvc.so -o 'output_http.so -w www'
You need to modify the localhost ip to the ip of the raspberry http://127.0.0.1:8080/?action=stream
Prepare a script to run the mjpegstreamer with the wanted configuration
cat /usr/local/lib/mjpg-streamer/mjpg-streamer-experimental/run
#!/bin/bash
# Start Webcam streaming
# WF 2020-01-24
scriptdir=$(dirname $0)
echo $scriptdir
cd $scriptdir
./mjpg_streamer -i input_uvc.so -o 'output_http.so -w www'
make script executable
chmod +x /usr/local/lib/mjpg-streamer/mjpg-streamer-experimental/run
root@pi4car:/etc/systemd/system# cat webcam.service
[Unit]
Description=Webcam Streaming
[Service]
Type=simple
ExecStart=/usr/local/lib/mjpg-streamer/mjpg-streamer-experimental/run
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=webcam
Restart=on-abnormal
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
sudo systemctl enable webcam.service
service webcam start
service webcam status
● webcam.service - Webcam Streaming
Loaded: loaded (/etc/systemd/system/webcam.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-01-24 07:42:33 CET; 4s ago
Main PID: 2396 (run)
Tasks: 4 (limit: 4915)
Memory: 780.0K
CGroup: /system.slice/webcam.service
├─2396 /bin/bash /usr/local/lib/mjpg-streamer/mjpg-streamer-experimental/run
└─2398 ./mjpg_streamer -i input_uvc.so -o output_http.so -w www
Jan 24 07:42:34 pi4car webcam[2396]: o: HTTP Listen Address..: (null)
Jan 24 07:42:34 pi4car webcam[2396]: o: username:password....: disabled
Jan 24 07:42:34 pi4car webcam[2396]: o: commands.............: enabled
Jan 24 07:42:34 pi4car mjpg_streamer[2398]: MJPG-streamer [2398]: www-folder-path......: www/
Jan 24 07:42:34 pi4car mjpg_streamer[2398]: MJPG-streamer [2398]: HTTP TCP port........: 8080
Jan 24 07:42:34 pi4car mjpg_streamer[2398]: MJPG-streamer [2398]: HTTP Listen Address..: (null)
Jan 24 07:42:34 pi4car mjpg_streamer[2398]: MJPG-streamer [2398]: username:password....: disabled
Jan 24 07:42:34 pi4car mjpg_streamer[2398]: MJPG-streamer [2398]: commands.............: enabled
Jan 24 07:42:34 pi4car mjpg_streamer[2398]: MJPG-streamer [2398]: starting input plugin input_uvc.so
Jan 24 07:42:34 pi4car mjpg_streamer[2398]: MJPG-streamer [2398]: starting output plugin: output_http.so (ID: 00)
uvcvideo: Failed to resubmit video URB (-19).
With Uv4l your mileage may vary. We had mixed results. While on raspberry stretch things ran with not much of an issue we had hours of fiddling on buster devices and could not get all cameras to work properly.
As of 2019-10-15 there is no official Buster support for uv4l yet see e.g. https://www.raspberrypi.org/forums/viewtopic.php?t=247305
As of 2020-01-21 there seems to be a work-around see https://blog.domski.pl/uv4l-on-raspberry-pi-running-debian-buster/
We will try using the commands for Raspberry Stretch
curl http://www.linux-projects.org/listing/uv4l_repo/lpkey.asc | sudo apt-key add -
echo "deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/stretch stretch main" >> /etc/apt/sources.list
sudo apt-get update
sudo apt-get install uv4l
# do we need to update the firmware?
# sudo rpi-update
sudo apt-get install uv4l-server uv4l-uvc uv4l-xscreen uv4l-mjpegstream uv4l-dummy uv4l-raspidisp
sudo apt-get install uv4l-webrtc
# for raspi-cam (we are using webcam!)
# apt-get install uv4l-raspicam-extras
/etc/uv4l # git init
Initialized empty Git repository in /etc/uv4l/.git/
/etc/uv4l# git add *
/etc/uv4l# git commit -a -m "initial state"
[master (root-commit) 0e2dc87] initial state
2 files changed, 555 insertions(+)
create mode 100644 uv4l-raspicam.conf
create mode 100644 uv4l-uvc.conf
git diff uv4l-uvc.conf
diff --git a/uv4l-uvc.conf b/uv4l-uvc.conf
index c01824e..f00b6b6 100644
--- a/uv4l-uvc.conf
+++ b/uv4l-uvc.conf
@@ -54,8 +54,7 @@ frame-buffers = 4
# device-id = <vid>:<pid>
# alternative to 'device-path', vendor and product identifiers of the USB device
-
-
+device-id = 046d:0825
#################################
# streaming server options
#################################
root@picarford:/etc/systemd/system# cat uv4l.service
[Unit]
Description=UV4L Webcam
[Service]
Type=simple
ExecStart=/usr/bin/uv4l -k --sched-rr --mem-lock --config-file=/etc/uv4l/uv4l-uvc.conf --driver uvc --driver-config-file=/etc/uv4l/uv4l-uvc.conf --server-option=--editable-config-file=/etc/uv4l/uv4l-uvc.conf --device=046d:0825
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=uv4l
Restart=on-abnormal
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
sudo systemctl enable uv4l.service
sudo systemctl start uv4l.service