Elke computer heeft tegenwoordig een webcam, of je kunt er een eenvoudige en goedkope USB-webcam op aansluiten, denk ook aan de Raspberry Pi. Een webcam kan je voor veel zaken gebruiken, waaronder videobewaking, maar dan moet het beeld van de webcam in een standaardformaat via het netwerk naar een centrale alarmcentrale gestuurd worden. Zo'n centrale alarminstallatie is meestal een computer met speciale software (ZoneMinder of Xeoma). Kleinere projecten kunnen zorgen voor een videofoon aan de deur, babyfoon of een monitor voor zorgbehoevenden waarbij je het beeld op een andere computer kunt bekijken met bijvoorbeeld VLC of een browser.
Eerst moeten we te weten komen of ons systeem de webcam ondersteunt. De meeste distributies ondersteunen webcams via Video4Linux (v4l2). Om informatie over de ondersteuning van uw webcam door v4l2 te verkrijgen installeer je in OpenSUSE Leap 42.1 met de volgende op dracht het pakket v4l-tools:
sudo zypper install v4l-tools
De volgende opdracht toont een overzicht van alle door v4l2 ondersteunde video hardware en hun eigenschappen op uw systeem:
dany@laptop:~> v4l-info
### v4l2 device info [/dev/video0] ###
general info
VIDIOC_QUERYCAP
driver : "uvcvideo"
card : "Integrated Camera"
bus_info : "usb-0000:00:14.0-6"
version : 4.1.13
capabilities : 0x84200001 [VIDEO_CAPTURE,?,STREAMING,(null)]
standards
inputs
VIDIOC_ENUMINPUT(0)
index : 0
name : "Camera 1"
type : CAMERA
audioset : 0
tuner : 0
std : 0x0 []
status : 0x0 []
video capture
VIDIOC_ENUM_FMT(0,VIDEO_CAPTURE)
index : 0
type : VIDEO_CAPTURE
flags : 0
description : "YUV 4:2:2 (YUYV)"
pixelformat : 0x56595559 [YUYV]
VIDIOC_ENUM_FMT(1,VIDEO_CAPTURE)
index : 1
type : VIDEO_CAPTURE
flags : 1
description : "MJPEG"
pixelformat : 0x47504a4d [MJPG]
VIDIOC_G_FMT(VIDEO_CAPTURE)
type : VIDEO_CAPTURE
fmt.pix.width : 848
fmt.pix.height : 480
fmt.pix.pixelformat : 0x56595559 [YUYV]
fmt.pix.field : NONE
fmt.pix.bytesperline : 1696
fmt.pix.sizeimage : 814080
fmt.pix.colorspace : SRGB
fmt.pix.priv : 4276996862
controls
VIDIOC_QUERYCTRL(BASE+0)
id : 9963776
type : INTEGER
name : "Brightness"
minimum : -64
maximum : 64
step : 1
default_value : 0
flags : 0
VIDIOC_QUERYCTRL(BASE+1)
id : 9963777
type : INTEGER
name : "Contrast"
minimum : 0
maximum : 100
step : 1
default_value : 50
flags : 0
VIDIOC_QUERYCTRL(BASE+2)
id : 9963778
type : INTEGER
name : "Saturation"
minimum : 0
maximum : 100
step : 1
default_value : 64
flags : 0
VIDIOC_QUERYCTRL(BASE+3)
id : 9963779
type : INTEGER
name : "Hue"
minimum : -180
maximum : 180
step : 1
default_value : 0
flags : 0
VIDIOC_QUERYCTRL(BASE+16)
id : 9963792
type : INTEGER
name : "Gamma"
minimum : 100
maximum : 500
step : 1
default_value : 300
flags : 0
VIDIOC_QUERYCTRL(BASE+19)
id : 9963795
type : INTEGER
name : "Gain"
minimum : 16
maximum : 255
step : 1
default_value : 16
flags : 0
VIDIOC_QUERYCTRL(BASE+24)
id : 9963800
type : MENU
name : "Power Line Frequency"
minimum : 0
maximum : 2
step : 1
default_value : 1
flags : 0
VIDIOC_QUERYCTRL(BASE+27)
id : 9963803
type : INTEGER
name : "Sharpness"
minimum : 0
maximum : 100
step : 1
default_value : 50
flags : 0
VIDIOC_QUERYCTRL(BASE+28)
id : 9963804
type : INTEGER
name : "Backlight Compensation"
minimum : 0
maximum : 1
step : 1
default_value : 0
flags : 0
Deze informatie leert ons dat onze webcam bereikbaar is via /dev/video0, dat de video aangeboden wordt in het YUYV en MJPEG formaat met een 848x480 resolutie. Nog meer informatie kan je weergeven met de volgende opdrachten:
dany@laptop:~>sudo zypper install v4l-utils
Gegevens van installatiebron laden... Lezen van geïnstalleerde pakketten... Afhankelijkheden tussen pakketten oplossen... The following NEW package is going to be installed: v4l-utils 1 new package to install. Totale downloadgrootte: 173,5 KiB. Reeds in de cache: 0 B. Na de operatie zal aanvullend 588,6 KiB worden gebruikt. Doorgaan? [j/n/? alle opties tonen] (j): package v4l-utils-0.8.9-3.3.x86_64 wordt opgehaald (1/1), 173,5 KiB (588,6 KiB uitgepakt) Ophalen: v4l-utils-0.8.9-3.3.x86_64.rpm ..................[gereed (658,9 KiB/s)] Controleren op conflicten tussen bestanden: ............................[gereed] (1/1) Installeert: v4l-utils-0.8.9-3.3 .................................[gereed] dany@laptop:~>sudo v4l2-ctl --device=/dev/video0 --list-formats
ioctl: VIDIOC_ENUM_FMT Index : 0 Type : Video Capture Pixel Format: 'YUYV' Name : YUV 4:2:2 (YUYV) Index : 1 Type : Video Capture Pixel Format: 'MJPG' (compressed) Name : MJPEG
Nu we weten dat v4l2 onze webcam ondersteunt, kunnen we de beelden met de volgende opdracht met VLC bekijken:
dany@laptop:~> vlc v4l2:///dev/video0
Je krijgt nu het beeld in het standaard formaat (hier YUYV). Wil je het beeld in een ander formaat bekijken, dan kan je dit specificeren met de chroma optie:
dany@laptop:~> vlc v4l2:///dev/video0:chroma=mjpg
Je kunt de webcambeelden rechtstreeks het netwerk opsturen met standaard netwerk hulpprogramma's als netcat, enz. Maar het wordt een stuk eenvoudiger als we daar gespecialiseerde software voor gebruiken. Installeer het pakket mjpg-streamer met de volgende opdracht:
dany@laptop:~> sudo /sbin/OCICLI http://software.opensuse.org/ymp/home:vodoo/openSUSE_Leap_42.1/mjpg-streamer.ymp
root's password:
Als u verdergaat, dan worden de volgende installatiebronnen toegevoegd:
* http://download.opensuse.org/repositories/home:/vodoo/openSUSE_Leap_42.1/
Als verdergaat, dan zullen de volgende softwarepakketten worden geïnstalleerd op uw systeem:
* mjpg-streamer
Continue? y/N
y
Toevoegen van installatiebronnen...
Installeren van pakketten...
Om een nieuwe softwarebron te activeren, moet je ze vertrouwen (met de Tab toets selecteer je de knop Vertrouwen en met Return bevestig je het vertrouwen). De beelden stream je met de opdracht:
dany@laptop:~> mjpg_streamer -i "/usr/lib64/mjpg-streamer/input_uvc.so -d /dev/video0 -y" -o "/usr/lib64/mjpg-streamer/output_http.so -w /usr/share/mjpg-streamer/www -p 8080"
MJPG Streamer Version: svn rev: 160
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 640 x 480
i: Frames Per Second.: 5
i: Format............: YUV
i: JPEG Quality......: 80
Adding control for Pan (relative)
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
Adding control for Tilt (relative)
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
Adding control for Pan Reset
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
Adding control for Tilt Reset
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
Adding control for Pan/tilt Reset
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
Adding control for Focus (absolute)
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
mapping control for Pan (relative)
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Tilt (relative)
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Pan Reset
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Tilt Reset
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Pan/tilt Reset
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Focus (absolute)
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for LED1 Mode
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for LED1 Frequency
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Disable video processing
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
mapping control for Raw bits per pixel
UVCIOC_CTRL_MAP - Error: Inappropriate ioctl for device
o: www-folder-path...: /usr/share/mjpg-streamer/www/
o: HTTP TCP port.....: 8080
o: username:password.: disabled
o: commands..........: enabled
^Csetting signal to stop
i: cleaning up ressources allocated by input thread
force cancellation of threads and cleanup resources
o: cleaning up ressources allocated by server thread #00
done
De errors die verschijnen hebben te maken met mogelijkheden die de webcam niet heeft, zoals het besturen (draaien) van de webcam. De -y optie wordt gebruikt omdat de webcam de beelden in het YUYV formaat aanbiedt, de -o optie zorgt dat de beeldenstroom met het http-protocol op het netwerk terecht komen, de -p optie wordt gebruikt om de videostream via poort 8080 op het netwerk te zetten. Om de videostream te testen, surf je op dezelfde computer (lokaal) naar http://localhost:8080. Breek het streamen af met de sneltoets Ctrl+c.
Elke goed beveiligde computer heeft een goed geconfigureerde firewall. Deze zorgt er echter voor dat de videostream het netwerk niet op kan. Daarvoor open je met de volgende opdracht de firewall poort 8080:
dany@laptop:~> sudo yast2 firewall services add zone=EXT tcpport=8080
Nu kan je op andere computers op het netwerk surfen naar http://192.168.1.4:8080/stream.html waarbij 192.168.1.4 het IPadres van de computer met de webcam is.
Bekijk je de beelden liever met VLC, open de netwerkstream dan het de URL http://192.168.1.4:8080/?action=stream op elke computer op hetzelfde netwerk.