1 pontos por GN⁺ 2024-09-17 | 1 comentários | Compartilhar no WhatsApp
  • 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

  1. Use o Raspberry Pi Imager para gravar o Lite OS (Bookworm 64-bit) no cartão micro SD
  2. Instale as bibliotecas necessárias
    sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6
    
  3. Ative o hardware do Raspberry Pi adicionando o conteúdo abaixo em /boot/firmware/config.txt
    camera_auto_detect=0
    start_x=1
    gpu_mem=16
    
    Defina camera_auto_detect=0 para ler a câmera via v4l2
  4. Monte o disco USB [referência]
    • Se não quiser gravar vídeo, pule esta etapa e não defina a flag record_path na 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
    

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_webrtc com a flag -h para ver todas as opções
  • Inicie a aplicação com as configurações aplicadas
    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/
    
    Dica 1: O Pi 5 não oferece suporte à codificação por hardware, então remova a flag --hw_accel e defina --v4l2_format como mjpeg. A codificação de vídeo será feita com OpenH264 Dica 2: Ao definir 1920x1080, o firmware do decodificador de hardware muda para 1920x1088, mas o isp/codificador não é ajustado, causando acesso fora da faixa de memória. Ao definir 1920x1088, 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 cliente
    echo '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

 
GN⁺ 2024-09-17
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

    • Em vez disso, montou seu próprio sistema usando uma câmera Raspberry Pi, um RPi Zero 2W, um hotspot LTE e um SIM pré-pago de US$ 5/mês da T-Mobile
    • Como software, usou o imgcomp para tirar fotos a cada segundo, enviar as imagens alteradas para um VPS e receber notificações no celular via Gotify
  • 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

    • Encontrou uma câmera de melhor qualidade no AliExpress
  • Outro usuário considerou o projeto mediamtx usando um Raspberry Pi Zero WH

    • É um bom exemplo de uso com WebRTC, embora possa exigir configuração de DDNS e port forwarding
    • Também é possível criar uma conexão privada entre o Pi e o servidor usando uma solução open source
  • 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

    • Está tentando maximizar o desempenho com C++
  • 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