Cámara de seguridad de código abierto basada en Raspberry Pi
(github.com/TzuHuanTai)- 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
- Usa Raspberry Pi Imager para grabar Lite OS (Bookworm 64-bit) en la tarjeta micro SD
- Instala las bibliotecas necesarias
sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6 - Activa el hardware de Raspberry Pi agregando lo siguiente a
/boot/firmware/config.txt
Configuracamera_auto_detect=0 start_x=1 gpu_mem=16camera_auto_detect=0para leer la cámara con v4l2 - Monta el disco USB [referencia]
- Si no quieres grabar video, omite este paso y no establezcas la bandera
record_pathal 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 - Si no quieres grabar video, omite este paso y no establezcas la bandera
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_webrtccon la bandera-hpara ver todas las opciones - Inicia la aplicación aplicando la configuración
Consejo 1: Pi 5 no soporta codificación por hardware, así que elimina la banderapulseaudio --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/--hw_accely establece--v4l2_formatenmjpeg. La codificación de video será manejada por OpenH264 Consejo 2: Al usar1920x1080, el firmware del decodificador por hardware cambia a1920x1088, pero el isp/codificador no se ajusta y se sale del rango de memoria. Si lo configuras en1920x1088, 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 = noa la configuración del clienteecho '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
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
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
Otro usuario consideró el proyecto mediamtx usando una Raspberry Pi Zero WH
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
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