Câmera de segurança open source baseada em Raspberry Pi
(github.com/TzuHuanTai)- Projeto que transforma um Raspberry Pi em uma câmera de segurança residencial de baixa latência
- Usa codificador de hardware v4l2DMA e WebRTC
- Reprodução e download de vídeo possíveis em uma câmera puramente P2P, sem servidor de mídia
- Vários usuários podem assistir à transmissão ao vivo ao mesmo tempo
- Raspberry Pi 5 e outros SBCs não oferecem suporte à codificação por hardware v4l2, sendo necessário executar no modo de codificação por software
Como usar
- Baixe o arquivo binário mais recente em Releases
- Instale o app Pi Camera e siga as instruções
Requisitos de hardware
- Raspberry Pi (Zero 2W ou superior)
- Módulo de câmera CSI
- Cartão micro SD de pelo menos 4 GB
- Disco USB e adaptador Micro-USB macho para USB-A fêmea
Configuração do ambiente
- Use o Raspberry Pi Imager para gravar o Lite OS (Bookworm 64-bit) no cartão micro SD
- Instale as bibliotecas necessárias
sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6 - Ative o hardware do Raspberry Pi adicionando o conteúdo abaixo em
/boot/firmware/config.txt
Definacamera_auto_detect=0 start_x=1 gpu_mem=16camera_auto_detect=0para ler a câmera via v4l2 - Monte o disco USB [referência]
- Se não quiser gravar vídeo, pule esta etapa e não defina a flag
record_pathna execução - Quando a unidade de disco for detectada, ela será montada automaticamente em
/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 - Se não quiser gravar vídeo, pule esta etapa e não defina a flag
Executando a aplicação
- Atualmente o MQTT é o único mecanismo de sinalização usado, então é preciso preparar um servidor MQTT antes de iniciar a aplicação
- Se a aplicação for usada apenas dentro da LAN, é possível instalar um servidor MQTT como Mosquitto no mesmo Pi
- Se for necessário acesso remoto, recomenda-se usar um servidor MQTT baseado em nuvem (ex.: HiveMQ, EXMQ)
- Para acessar um servidor de sinalização remoto via dados móveis, é necessário configurar DDNS e port forwarding
Execução
- Execute o binário
pi_webrtccom a flag-hpara ver todas as opções - Inicie a aplicação com as configurações aplicadas
Dica 1: O Pi 5 não oferece suporte à codificação por hardware, então remova a flagpulseaudio --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_accele defina--v4l2_formatcomomjpeg. A codificação de vídeo será feita com OpenH264 Dica 2: Ao definir1920x1080, o firmware do decodificador de hardware muda para1920x1088, mas o isp/codificador não é ajustado, causando acesso fora da faixa de memória. Ao definir1920x1088, não há problema
Executar como serviço Linux
1. Executar o pulseaudio como daemon de sistema global [referência]
- Crie o arquivo
/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 - Adicione
autospawn = noà configuração do clienteecho 'autospawn = no' | sudo tee -a /etc/pulse/client.conf > /dev/null - Adicione o root ao grupo pulse
sudo adduser root pulse-access - Ative e inicie o serviço
sudo systemctl daemon-reload sudo systemctl enable pulseaudio.service sudo systemctl start pulseaudio.service
2. Configurar a execução do pi_webrtc e a inicialização automática após reinicialização
- Crie o arquivo
/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 - Ative e inicie o serviço
sudo systemctl daemon-reload sudo systemctl enable pi-webrtc.service sudo systemctl start pi-webrtc.service
Configuração avançada
- É necessário adicionar microfone e alto-falante para comunicação bidirecional
Microfone
- Consulte o link para instruções sobre cabeamento e teste do microfone
Alto-falante
- Consulte o link para instruções sobre configuração do alto-falante
Licença
- Este projeto é licenciado sob a Apache License, Version 2.0. Para mais detalhes, consulte o arquivo LICENSE
Resumo do GN⁺
- Este projeto mostra como transformar um Raspberry Pi em uma câmera de segurança residencial de baixa latência
- Usa codificador de hardware v4l2DMA e WebRTC para funcionar de forma puramente P2P, sem servidor de mídia
- Vários usuários podem assistir à transmissão ao vivo simultaneamente, o que o torna útil como câmera de segurança residencial
- Com o mecanismo de sinalização via MQTT, pode dar suporte tanto a LAN quanto a acesso remoto
- Outros projetos com funcionalidades semelhantes incluem MotionEye e ZoneMinder
1 comentários
Comentários do Hacker News
Um usuário tentou instalar um sistema de segurança para monitoramento remoto durante uma reforma em casa, mas descobriu que a maioria dos recursos exige internet banda larga
Outro usuário morava em um apartamento enquanto construía a casa e queria fazer um vídeo em timelapse e acompanhar o andamento da obra pela internet
Outro usuário considerou o projeto mediamtx usando um Raspberry Pi Zero WH
Um usuário questionou o fato de o Raspberry Pi 5 não oferecer suporte a codificação por hardware v4l2
Outro usuário estava tentando fazer detecção de pessoas em tempo real usando o modelo yolov3-tiny
Outro usuário alcançou um objetivo semelhante com o Sentry-Picam, sincronizando com outros três dispositivos via Syncthing e conectando um script de notificações push baseado em sendxmpp
Um usuário realizou um projeto parecido usando Nvidia Jetson e atualmente tem interesse na reCamera
Outro usuário estava procurando uma placa que use firmware open source
Por fim, um usuário queria saber se o WebRTC seria uma boa solução para gravar apenas áudio