1 points par GN⁺ 2024-09-17 | 1 commentaires | Partager sur WhatsApp
  • Projet qui transforme un Raspberry Pi en caméra de sécurité domestique à faible latence
    • Utilise l’encodeur matériel v4l2DMA et WebRTC
    • Permet la lecture et le téléchargement de vidéos avec une caméra purement P2P, sans serveur multimédia
    • Plusieurs utilisateurs peuvent regarder le flux en direct simultanément
    • Le Raspberry Pi 5 et les autres SBC ne prennent pas en charge l’encodage matériel v4l2, ils doivent donc être utilisés en mode d’encodage logiciel

Mode d’emploi

  • Télécharger le dernier fichier binaire depuis Releases
  • Installer l’application Pi Camera et suivre les instructions

Exigences matérielles

  • Raspberry Pi (Zero 2W ou supérieur)
  • Module caméra CSI
  • Carte micro SD d’au moins 4 Go
  • Disque USB et adaptateur Micro-USB mâle vers USB-A femelle

Configuration de l’environnement

  1. Utiliser Raspberry Pi Imager pour écrire Lite OS (Bookworm 64-bit) sur la carte micro SD
  2. Installer les bibliothèques requises
    sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6
    
  3. Activer le matériel Raspberry Pi en ajoutant le contenu ci-dessous à /boot/firmware/config.txt
    camera_auto_detect=0
    start_x=1
    gpu_mem=16
    
    Définir camera_auto_detect=0 pour lire la caméra via v4l2
  4. Monter le disque USB [référence]
    • Si vous ne souhaitez pas enregistrer les vidéos, ignorez cette étape et ne définissez pas l’option record_path au lancement
    • Lorsqu’un disque est détecté, il est automatiquement monté sur /mnt/ext_disk
    sudo apt-get install autofs
    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
    

Exécution de l’application

  • MQTT étant actuellement le seul mécanisme de signalisation utilisé, un serveur MQTT doit être prêt avant de démarrer l’application
  • Si l’application n’est utilisée que sur le LAN, il est possible d’installer un serveur MQTT comme Mosquitto sur le même Pi
  • Si un accès distant est nécessaire, il est recommandé d’utiliser un serveur MQTT basé dans le cloud (par ex. HiveMQ, EXMQ)
  • Pour accéder à un serveur de signalisation distant via les données mobiles, il faut configurer le DDNS et le port forwarding

Exécution

  • Vous pouvez lancer le binaire pi_webrtc avec l’option -h pour voir toutes les options
  • Démarrer l’application avec la configuration appliquée
    pulseaudio --start
    /path/to/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=hakunamatata --mqtt_password=Wonderful --uid=home-pi-zero2w --record_path=/mnt/ext_disk/video/
    
    Astuce 1 : Le Pi 5 ne prend pas en charge l’encodage matériel, il faut donc supprimer l’option --hw_accel et définir --v4l2_format sur mjpeg. L’encodage vidéo est alors géré par OpenH264 Astuce 2 : Avec le réglage 1920x1080, le firmware du décodeur matériel passe à 1920x1088, mais comme l’isp/l’encodeur n’est pas ajusté, cela sort de la plage mémoire. En définissant 1920x1088, il n’y a pas de problème

Exécution comme service Linux

1. Exécuter pulseaudio comme démon système global [référence]
  • Créer le fichier /etc/systemd/system/pulseaudio.service
    [Unit]
    Description= Pulseaudio Daemon
    After=rtkit-daemon.service systemd-udevd.service dbus.service
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disallow-module-loading
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    
  • Ajouter autospawn = no à la configuration client
    echo 'autospawn = no' | sudo tee -a /etc/pulse/client.conf > /dev/null
    
  • Ajouter root au groupe pulse
    sudo adduser root pulse-access
    
  • Activer et démarrer le service
    sudo systemctl daemon-reload
    sudo systemctl enable pulseaudio.service
    sudo systemctl start pulseaudio.service
    
2. Configurer l’exécution de pi_webrtc et son démarrage automatique au redémarrage
  • Créer le fichier /etc/systemd/system/pi-webrtc.service
    [Unit]
    Description= The p2p camera via webrtc.
    After=systemd-networkd.service
    
    [Service]
    Type=simple
    WorkingDirectory=/path/to
    ExecStart=/path/to/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=hakunamatata --mqtt_password=wonderful --record_path=/mnt/ext_disk/video/
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    
  • Activer et démarrer le service
    sudo systemctl daemon-reload
    sudo systemctl enable pi-webrtc.service
    sudo systemctl start pi-webrtc.service
    

Configuration avancée

  • Il faut ajouter un microphone et un haut-parleur pour la communication bidirectionnelle

Microphone

  • Voir le lien pour les instructions de câblage et de test du microphone

Haut-parleur

  • Voir le lien pour les instructions de configuration du haut-parleur

Licence

  • Ce projet est distribué sous licence Apache License, Version 2.0. Voir le fichier LICENSE pour plus de détails

Résumé de GN⁺

  • Ce projet montre comment transformer un Raspberry Pi en caméra de sécurité domestique à faible latence
  • Il fonctionne en mode purement P2P sans serveur multimédia grâce à l’encodeur matériel v4l2DMA et à WebRTC
  • Plusieurs utilisateurs peuvent regarder simultanément le flux en direct, ce qui le rend utile comme caméra de sécurité domestique
  • Son mécanisme de signalisation basé sur MQTT permet aussi bien l’accès sur le LAN que l’accès distant
  • Parmi les autres projets offrant des fonctions similaires, on trouve MotionEye et ZoneMinder

1 commentaires

 
GN⁺ 2024-09-17
Avis Hacker News
  • Un utilisateur a expliqué qu'en rénovant sa maison, il avait voulu installer un système de sécurité pour une surveillance à distance, avant de découvrir que la plupart des fonctionnalités nécessitaient un accès Internet haut débit

    • Il a donc construit son propre système avec une caméra Raspberry Pi, un RPi Zero 2W, un hotspot LTE et une carte SIM prépayée T-Mobile à 5 $/mois
    • Côté logiciel, il utilisait imgcomp pour prendre une photo chaque seconde, téléverser les images modifiées vers un VPS et recevoir des notifications sur son téléphone via Gotify
  • Un autre utilisateur vivait en appartement pendant la construction de sa maison et voulait créer une vidéo en time-lapse tout en vérifiant l'avancement des travaux via Internet

    • Il a trouvé une caméra de meilleure qualité sur AliExpress
  • Un autre encore envisageait le projet mediamtx avec un Raspberry Pi Zero WH

    • C'est un bon exemple d'utilisation de WebRTC, même si une configuration DDNS et un port forwarding peuvent être nécessaires
    • Il est possible d'utiliser des solutions open source pour créer une connexion privée entre le Pi et le serveur
  • Un utilisateur s'est demandé pourquoi le Raspberry Pi 5 ne prenait pas en charge l'encodage matériel v4l2

  • Un autre essayait de faire de la détection de personnes en temps réel avec le modèle yolov3-tiny

    • Il cherchait à maximiser les performances en C++
  • Un autre utilisateur a atteint un objectif similaire avec Sentry-Picam, en le synchronisant avec trois autres appareils via Syncthing et en y branchant un script de notifications push basé sur sendxmpp

  • Un utilisateur a mené un projet similaire avec Nvidia Jetson et s'intéresse désormais à reCamera

  • Un autre cherchait une carte utilisant un firmware open source

  • Enfin, un utilisateur se demandait si WebRTC était une bonne solution pour n'enregistrer que le son