1 puntos por GN⁺ 2024-09-17 | 1 comentarios | Compartir por WhatsApp
  • Proyecto que convierte una Raspberry Pi en una cámara de seguridad para el hogar de baja latencia
    • Usa el codificador por hardware v4l2DMA y WebRTC
    • Permite reproducir y descargar video como una cámara puramente P2P, sin servidor de medios
    • Varios usuarios pueden ver la transmisión en vivo al mismo tiempo
    • Raspberry Pi 5 u otras SBC no soportan codificación por hardware v4l2, por lo que deben ejecutarse en modo de codificación por software

Cómo usar

  • Descarga el archivo binario más reciente desde Releases
  • Instala la app Pi Camera y sigue las instrucciones

Requisitos de hardware

  • Raspberry Pi (Zero 2W o superior)
  • Módulo de cámara CSI
  • Tarjeta micro SD de al menos 4 GB
  • Disco USB y adaptador Micro-USB macho a USB-A hembra

Configuración del entorno

  1. Usa Raspberry Pi Imager para grabar Lite OS (Bookworm 64-bit) en la tarjeta micro SD
  2. Instala las bibliotecas necesarias
    sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6
    
  3. Activa el hardware de Raspberry Pi agregando lo siguiente a /boot/firmware/config.txt
    camera_auto_detect=0
    start_x=1
    gpu_mem=16
    
    Configura camera_auto_detect=0 para leer la cámara con v4l2
  4. Monta el disco USB [referencia]
    • Si no quieres grabar video, omite este paso y no establezcas la bandera record_path al ejecutar
    • Cuando se detecte la unidad de disco, se montará automáticamente en /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
    

Ejecutar la aplicación

  • Actualmente MQTT es el único mecanismo de señalización usado, así que se necesita tener listo un servidor MQTT antes de iniciar la aplicación
  • Si la aplicación se usará solo dentro de la LAN, se puede instalar un servidor MQTT como Mosquitto en la misma Pi
  • Si se requiere acceso remoto, se recomienda usar un servidor MQTT en la nube (por ejemplo: HiveMQ, EXMQ)
  • Para acceder al servidor de señalización remoto desde datos móviles, es necesario configurar DDNS y port forwarding

Ejecución

  • Puedes ejecutar el binario pi_webrtc con la bandera -h para ver todas las opciones
  • Inicia la aplicación aplicando la configuración
    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/
    
    Consejo 1: Pi 5 no soporta codificación por hardware, así que elimina la bandera --hw_accel y establece --v4l2_format en mjpeg. La codificación de video será manejada por OpenH264 Consejo 2: Al usar 1920x1080, el firmware del decodificador por hardware cambia a 1920x1088, pero el isp/codificador no se ajusta y se sale del rango de memoria. Si lo configuras en 1920x1088, no hay problema

Ejecutar como servicio de Linux

1. Ejecutar pulseaudio como demonio a nivel de sistema [referencia]
  • Crea el archivo /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
    
  • Agrega autospawn = no a la configuración del cliente
    echo 'autospawn = no' | sudo tee -a /etc/pulse/client.conf > /dev/null
    
  • Agrega root al grupo pulse
    sudo adduser root pulse-access
    
  • Habilita e inicia el servicio
    sudo systemctl daemon-reload
    sudo systemctl enable pulseaudio.service
    sudo systemctl start pulseaudio.service
    
2. Ejecutar pi_webrtc y configurarlo para inicio automático al reiniciar
  • Crea el archivo /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
    
  • Habilita e inicia el servicio
    sudo systemctl daemon-reload
    sudo systemctl enable pi-webrtc.service
    sudo systemctl start pi-webrtc.service
    

Configuración avanzada

  • Se necesita agregar un micrófono y un altavoz para comunicación bidireccional

Micrófono

  • Consulta el enlace para instrucciones sobre cableado y prueba del micrófono

Altavoz

  • Consulta el enlace para instrucciones sobre la configuración del altavoz

Licencia

  • Este proyecto está licenciado bajo Apache License, Version 2.0. Consulta el archivo LICENSE para más detalles

Resumen de GN⁺

  • Este proyecto ofrece una forma de convertir una Raspberry Pi en una cámara de seguridad doméstica de baja latencia
  • Usa el codificador por hardware v4l2DMA y WebRTC para funcionar como una solución puramente P2P sin servidor de medios
  • Varios usuarios pueden ver la transmisión en vivo al mismo tiempo, lo que lo hace útil como cámara de seguridad para el hogar
  • El mecanismo de señalización con MQTT permite soporte tanto para acceso por LAN como remoto
  • Otros proyectos con funciones similares incluyen MotionEye y ZoneMinder

1 comentarios

 
GN⁺ 2024-09-17
Comentarios de Hacker News
  • Un usuario intentó instalar un sistema de seguridad para monitoreo remoto durante una remodelación de su casa, pero descubrió que la mayoría de las funciones requieren internet de banda ancha

    • En su lugar, armó su propio sistema usando una cámara Raspberry Pi, una RPi Zero 2W, un hotspot LTE y una SIM prepago de T-Mobile de $5 al mes
    • Como software, usó imgcomp para tomar fotos cada segundo, subir las imágenes modificadas a un VPS y recibir alertas en su teléfono mediante Gotify
  • Otro usuario vivía en un departamento mientras construía su casa y quería hacer un video timelapse y revisar el avance de la obra por internet

    • Encontró una cámara de mejor calidad en AliExpress
  • Otro usuario consideró el proyecto mediamtx usando una Raspberry Pi Zero WH

    • Lo mencionó como un buen ejemplo de uso de WebRTC, aunque podría requerir configurar DDNS y port forwarding
    • También es posible crear una conexión privada entre la Pi y el servidor usando una solución open source
  • Un usuario se preguntó por qué la Raspberry Pi 5 no soporta codificación por hardware v4l2

  • Otro usuario estaba intentando hacer detección de personas en tiempo real con el modelo yolov3-tiny

    • Está tratando de maximizar el rendimiento con C++
  • Otro usuario logró un objetivo similar usando Sentry-Picam, sincronizándolo con otros 3 dispositivos mediante Syncthing y conectando un script de notificaciones push basado en sendxmpp

  • Un usuario llevó a cabo un proyecto similar con Nvidia Jetson y actualmente está interesado en reCamera

  • Otro usuario estaba buscando una placa que usara firmware open source

  • Por último, un usuario se preguntó si WebRTC sería una buena solución si solo quisiera grabar sonido