Differenze tra le versioni di "Appunti per un sistema di video, sorveglianza e streaming, indipendente"
Riga 128: | Riga 128: | ||
== WEB Streaming == | == WEB Streaming == | ||
− | Due soluzioni in "prova": | + | 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 |
Versione delle 13:34, 17 nov 2013
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 -vf -hf -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 -vf -hf -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