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

Da raspibo.
Jump to navigation Jump to search

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