Appunti per un sistema di video, sorveglianza e streaming, indipendente

Da raspibo.
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

L'idea 'finale' e`/sarebbe, ottenere un sistema che sia indipendente, adattabile alle esigenze di ogniuno ed anche personalizzabile, diciamo un sistema di "video" completo e anche di piu`.

Network

Probabilmente non si e` notato, ma iniziamo da qua:

Raspberry Pi Access Point con autenticazione WEP2, DNS e Firewall
Questo e` stato realizzato per poter avere un sistema collegabile alla rete di casa/ufficio e controllabile da questa, ma non solo, il Raspberry Pi con la sua Onboard Camera deve [anche] essere raggiungibile in WiFi se desideriamo posizionarlo dove non e` presente una rete cablata, e raggiungibile solo tramite autenticazione (non vorrete che qualcuno vi spii o che veda che lo spiate). E` anche possibile utilizzare il Raspberry Pi come Access Point, quindi, potete anche usarlo per collegarvi ad una rete cablata. Insomma, ho cercato una soluzione che fosse di connessione a 360 gradi (piu` o meno).


Video motion

Il secondo punto e` stato implementare la soluzione di videosorveglianza motion-mmal:

Motion con Raspberry Pi Onboard Camera
Mi sono fermato alla sola registrazione video/foto sulla SD Card in caso di rilevazione di movimento, come scritto all'inizio, questa e` la soluzione 'indipendente', tipo lasciare tutta la notte il sistema acceso per monitoraggio scollegato da qualsiasi rete e magari collegato ad una batteria/ups di alimentazione.


Streaming

Be`, non e` detto che lo si voglia utilizzare solamente in questo modo, possiamo anche fare qualcos'altro, nelle modalita` d'uso ho previsto anche quella di streaming, dopo svariate prove ho trovato i parametri a me piu` congeniali/funzionali, attualmente e` pilotata in "manuale", ma potrebbe essere un'idea realizzarla con una interfaccia web.

Descrivero` (cerchero`) come ho strutturato ora il modo d'uso per "switchare" da uno all'altro tipo.

Modifiche e/o predisposizioni al file "/etc/rc.local" per l'esecuzione automatica del "firewall", del "motion" e dello "stream" (alcune gia` disattivate, capirete perche`):

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# My add: iptables
if [ -x /etc/init.d/iptables ];then
  . /etc/init.d/iptables start
fi

#if [ -x /home/pi/motion-mmalcam/motion ];then
#  su pi -c "/home/pi/motion-mmalcam/motion -n -c /home/pi/motion-mmalcam/motion-mmalcam.conf &"
#fi

#while true; do
#  raspivid -w 1920 -h 1080 -fps 12 -rot 180 -t 0 -o - | nc -l 10301
#done

exit 0


Per "comandare" il Raspberry Pi ho pensato di utilizzare "ssh" (tralascio tutti i 'fallimenti' e le prove del come sono arrivato qua).

Per prima cosa ho scambiato la chiave di autenticazione, cosicche` non debba piu` inserire la password, confermando sempre con enter a qualsiasi richiesta:

ssh-keygen

Poi l'ho trasferita (vi chiedera` la password del Raspberry Pi):

ssh-copy-id pi@<NomeDelRaspberriPi o IP>

Ho avuto qualche difficolta` con i comandi "kill", quindi ho predisposto un file "/home/pi/motion-mmalcam/motion-kill.sh", questo e` il contenuto:

#!/bin/bash

kill -6 $(pidof motion)

Se non lo avete fatto, rendetelo eseguibile:

chmod 700 /home/pi/motion-mmalcam/motion-kill.sh


Sul computer che uso per il controllo ho creato tre files eseguibili (ovviamente la directory "/home/$USER/bin" e` nel path di ricerca degli eseguibili).

"/home/$USER/bin/RaspberryPi-motion.sh"
L'avvio di motion-mmal
#!/bin/bash

# Stop motion
/home/$USER/bin/RaspberryPi-motion-stop.sh

# Start motion
ssh pi@<NomeDelRaspberriPi o IP> /home/pi/motion-mmalcam/motion -n -c /home/pi/motion-mmalcam/motion-mmalcam.conf &
"/home/$USER/bin/RaspberryPi-motion-stop.sh"
Lo stop di motion-mmal
#!/bin/bash

# Stop motion
ssh pi@<NomeDelRaspberriPi o IP> /home/pi/motion-mmalcam/motion-kill.sh
sleep 2
"/home/$USER/bin/RaspberryPi-stream.sh"
Avvia lo streaming fra i due pc, ed il client video sul pc locale
#!/bin/bash

# Stop motion
/home/$USER/bin/RaspberryPi-motion-stop.sh

# Start camera e streaming (in ascolto, switch -l di 'nc')
ssh pi@<NomeDelRaspberriPi o IP> "raspivid -w 640 -h 360 -fps 12 -rot 180 -t 0 -o - | nc -l 10301" &
sleep 2

# Start local player
nc <NomeDelRaspberriPi o IP> 10301 | mplayer -fps 30 -demuxer h264es -

WEB Streaming

Due soluzioni in "prova" (ovviamente i comandi sono generalizzati, dimensioni geometriche, frame per secondo e rotazioni immagine sono da 'personalizzare' secondo esigenza).

Una che trasmette direttamente, ma sovraccarica un po` il Raspberry Pi
raspivid -t 0 -o – | cvlc -vvv stream:///dev/stdin --play-and-exit --sout '#standard{access=http,mux=ts,dst=:8080}' :demux=h264


Un'altra che trasmette ad un secondo computer che si occupa poi di fare stream
raspivid -t 0 -o – | nc [IP address of computer] 5001
nc -l -p 5001 | cvlc -vvv stream:///dev/stdin --play-and-exit --sout '#standard{access=http,mux=ts,dst=:8080}' :demux=h264
Altra versione con ascolto invertito
raspivid -t 0 -o – | nc -l 5001
nc [IP address of Raspberry Pi] 5001 | cvlc -vvv stream:///dev/stdin --play-and-exit --sout '#standard{access=http,mux=ts,dst=:8080}' :demux=h264


Attuale comando per streaming in uso, sembra funzionare sufficientemente bene, il ritardo e` di circa 2 secondi e la cpu del Raspberry Pi sembra essere intorno al 20%
raspivid -rot 180 -w 640 -h 360 -fps 31 -t 0 -o - | cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8080}' :demux=h264
Inserimento in una pagina web
<embed autoplay="yes" height="360" loop="no" target="http://<IP address Raspberry Pi>:8080/" type="application/x-vlc-plugin" width="640"></embed>
Risultato (visibile ad orari random)
Momentaneamente sospeso --Dave4rp (discussioni) 09:24, 25 mar 2014 (CET)
(ricordo che serve: aptitude install browser-plugin-vlc)

Test doppia camera (Onboard & USB)

Ho tentato un test con motion sulla camera USB (il motion originale, quello che usa il device /dev/videoX) e lo streaming con la camera onboard. Il raspberry e` "per il collo", ma sembra funzionare, il difficile e` stato trovare una webcam USB che non facesse "sedere" l'alimentazione del Raspberry Pi (ho usato una camera HD DVR).

RPi2CamTop.png

Riferimenti

http://www.raspberrypi.org/phpBB3/viewtopic.php?f=43&t=45368&sid=50671630477deebefaa761767eaeaefb

http://www.mybigideas.co.uk/RPi/RPiCamera/

http://www.recantha.co.uk/blog/?p=4165

http://www.videolan.org/doc/vlc-user-guide/en/ch07.html#id345707