Le soluzioni di videosorveglianza domestica sono diventate sempre più popolari, grazie alla loro capacità di garantire sicurezza e monitoraggio in tempo reale. Il mercato offre un’infinità di telecamere IP che possono essere integrate tra loro e gestite tramite un NVR locale oppure ricorrendo ad applicazioni cloud. Una semplice Raspberry Pi può tuttavia trasformarsi in una telecamera di sicurezza a bassa latenza, servendosi del codificatore hardware v4l2 DMA e del protocollo WebRTC.
Questo progetto pubblicato su GitHub, permette di configurare una scheda Raspberry Pi per ottenere una telecamera P2P (peer-to-peer): ciò significa che gli utenti possono richiedere la riproduzione e il download dei video senza la necessità di un server media. Più utenti possono quindi guardare il flusso video in diretta contemporaneamente, senza alcun tipo di limitazione.
Raspberry Pi come telecamera peer-to-peer per la videosorveglianza
Prima dare il via al progetto, sono necessari alcuni requisiti hardware. Si tratta di componenti a basso costo, indispensabili per configurare il sistema e ottenere la propria videocamera di sorveglianza:
- Raspberry Pi Zero 2W o Raspberry Pi 4B (la scheda Raspberry Pi 5 e altri single-board computer purtroppo non supportano la codifica hardware v4l2 e devono utilizzare la modalità di codifica software).
- Modulo telecamera CSI, essenziale per acquisire i flussi video.
- Scheda microSD, con almeno 4 GB di capienza per memorizzare il sistema operativo e le applicazioni.
- Unità di memorizzazione USB e adattatore da Micro-USB maschio a USB-A femmina (supporto usato per la memorizzazione delle registrazioni)
Cos’è il codificatore hardware v4l2 DMA?
Il codificatore hardware v4l2 DMA è una tecnologia essenziale per l’elaborazione video, in particolare nel caso delle schede Raspberry Pi e in altri dispositivi compatibili. La tecnologia combina diverse funzioni per ottimizzare l’acquisizione e la codifica video, consentendo applicazioni più efficienti come la videosorveglianza e lo streaming.
La sigla v4l2 sta per Video4Linux 2, un’interfaccia standard del kernel Linux che permette l’accesso ai dispositivi video. Grazie a v4l2, gli sviluppatori possono creare applicazioni che interagiscono facilmente con telecamere e schede di acquisizione. L’interfaccia offre funzionalità per la cattura, la registrazione e la trasmissione di flussi video, rendendo più semplice la gestione dei contenuti multimediali.
La tecnologia DMA (Direct Memory Access), a sua volta, che consente di accedere direttamente alla memoria del sistema, senza il coinvolgimento del processore. Così, è possibile ridurre il carico di lavoro della CPU e migliorare le prestazioni generali.
Come provare il progetto Raspberry Pi WebRTC
Per cimentarsi con il progetto Raspberry Pi WebRTC, consigliamo dapprima di scaricare il pacchetto bookworm.tar.gz
dalla sezione Assets di questa pagina. Successivamente, è possibile scaricare l’app Pi Camera seguendo le istruzioni per la sua configurazione.
A questo punto si può ricorrere al software Raspberry Pi Imager per scrivere il sistema operativo OS Lite (Bookworm 64 bit) sulla scheda microSD.
Dopo aver completato l’installazione, è necessario aprire una finestra del terminale in Raspberry Pi OS Lite quindi digitare quanto segue per caricare le librerie necessarie:
sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6 -y
Impostazione del file di configurazione
Le modifiche che si andranno adesso ad apportare al contenuto del file /boot/firmware/config.txt
, riguardano la configurazione della GPU e della fotocamera sulla Raspberry Pi. Spieghiamo nel dettaglio ciascun intervento:
camera_auto_detect=0
: Disabilita la rilevazione automatica della fotocamera. È utile se si utilizza una fotocamera non ufficiale o se si desidera evitare che il sistema cerchi di rilevare automaticamente la telecamera connessa. Inoltre con questa direttiva ci si assicura che la telecamera sia riconosciuta da v4l2.start_x=1
: Abilita l’uso di funzionalità grafiche avanzate (X11) sulla scheda Raspberry Pi. L’impostazione è necessaria per avviare il server X e consente l’uso di applicazioni grafiche e la gestione della fotocamera.gpu_mem=16
: Assegna 16 MB di memoria GPU. Si tratta di una regolazione utile per ottimizzare l’uso della memoria, liberando così memoria RAM anche per le altre applicazioni.
È quindi necessario aprire il file /boot/firmware/config.txt
quindi aggiungere ciò che segue:
camera_auto_detect=0
start_x=1
gpu_mem=16
Registrazione video sull’unità USB collegata
Per registrare video con la telecamera collegata alla Raspberry Pi è necessario installare e impostare autofs
:
sudo apt install autofs -y
echo '/- /etc/auto.usb --timeout=5' | sudo tee -a /etc/auto.master > /dev/null
echo '/mnt/ext_disk -fstype=auto,nofail,nodev,nosuid,noatime,umask=000 :/dev/sda1' | sudo tee -a /etc/auto.usb > /dev/null
sudo systemctl restart autofs
Segnalazione tramite MQTT e avvio dell’applicazione
Al momento il progetto Raspberry Pi WebRTC utilizza il protocollo MQTT come unico meccanismo di segnalazione.
Per accedere alla telecamera soltanto via LAN, è possibile installare un server MQTT locale come Mosquitto. Per l’accesso remoto, invece, si può valutare l’adozione di un server MQTT basato su cloud come HiveMQ oppure EXMQ.
L’avvio dell’applicazione Raspberry Pi WebRTC si concretizza eseguendo in primis il servizio PulseAudio e poi richiamando il comando pi_webrtc
:
pulseaudio --start
pi_webrtc --device=/dev/video0 --fps=30 --width=1280 --height=960 --v4l2_format=h264 --hw_accel --mqtt_host=example.s1.eu.hivemq.cloud --mqtt_port=8883 --mqtt_username=nomeutente --mqtt_password=miapwd123 --uid=home-pi-zero2w --record_path=/mnt/ext_disk/video/
Seguendo le istruzioni riportate a questo indirizzo, è possibile impostare l’esecuzione di pi_webrtc
come servizio Linux in modo tale da predisporre automaticamente il funzionamento della telecamera a ogni riavvio di OS Lite.
Impostazione del client Pi Camera per Android
Abbiamo suggerito in precedenza di scaricare e installare l’app Pi Camera per Android. Dopo l’installazione, una volta configurata la telecamera Raspberry Pi, basta accedere alle impostazioni quindi cliccare sull’icona raffigurante il mondo per incollare le impostazioni tecniche corrette.
Con il pulsante “+”, è possibile aggiungere una nuova telecamera: come Alias, specificare un’etichetta da utilizzare per riconoscere facilmente la Raspberry Pi.
Le immagini nell’articolo sono tratte dal repository GitHub e dal video esplicativo dell’autore.