Camera an ninh mã nguồn mở dựa trên Raspberry Pi
(github.com/TzuHuanTai)- Dự án biến Raspberry Pi thành camera an ninh gia đình độ trễ thấp
- Sử dụng bộ mã hóa phần cứng v4l2DMA và WebRTC
- Có thể phát lại và tải xuống video bằng camera thuần P2P mà không cần media server
- Nhiều người dùng có thể xem luồng trực tiếp cùng lúc
- Raspberry Pi 5 hoặc các SBC khác không hỗ trợ mã hóa phần cứng v4l2, cần chạy ở chế độ mã hóa phần mềm
Cách sử dụng
- Tải tệp nhị phân mới nhất từ Releases
- Cài đặt ứng dụng Pi Camera và làm theo hướng dẫn
Yêu cầu phần cứng
- Raspberry Pi (Zero 2W trở lên)
- Mô-đun camera CSI
- Thẻ micro SD tối thiểu 4GB
- Ổ đĩa USB và bộ chuyển đổi Micro-USB Male sang USB-A Female
Thiết lập môi trường
- Dùng Raspberry Pi Imager để ghi Lite OS (Bookworm 64-bit) vào thẻ micro SD
- Cài đặt các thư viện cần thiết
sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6 - Thêm nội dung bên dưới vào
/boot/firmware/config.txtđể kích hoạt phần cứng Raspberry Pi
Đặtcamera_auto_detect=0 start_x=1 gpu_mem=16camera_auto_detect=0để đọc camera qua v4l2 - Mount ổ USB [tham khảo]
- Nếu không muốn ghi video, hãy bỏ qua bước này và không đặt cờ
record_pathkhi chạy - Khi ổ đĩa được phát hiện, nó sẽ tự động được mount vào
/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 - Nếu không muốn ghi video, hãy bỏ qua bước này và không đặt cờ
Chạy ứng dụng
- Hiện tại MQTT là cơ chế signaling duy nhất được sử dụng, nên cần chuẩn bị máy chủ MQTT trước khi khởi động ứng dụng
- Nếu ứng dụng chỉ dùng trong LAN, có thể cài máy chủ MQTT như Mosquitto ngay trên cùng Pi đó
- Nếu cần truy cập từ xa, nên dùng máy chủ MQTT trên đám mây (ví dụ: HiveMQ, EXMQ)
- Để truy cập máy chủ signaling từ xa qua dữ liệu di động, cần cấu hình DDNS và port forwarding
Chạy
- Có thể chạy tệp nhị phân
pi_webrtcvới cờ-hđể xem toàn bộ tùy chọn - Áp dụng cấu hình rồi khởi động ứng dụng
Mẹo 1: Pi 5 không hỗ trợ mã hóa phần cứng, vì vậy hãy bỏ cờ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/--hw_accelvà đặt--v4l2_formatthànhmjpeg. Việc mã hóa video sẽ do OpenH264 xử lý Mẹo 2: Khi đặt1920x1080, firmware của bộ giải mã phần cứng sẽ đổi thành1920x1088, nhưng isp/encoder không được điều chỉnh nên vượt phạm vi bộ nhớ. Đặt1920x1088sẽ không gặp vấn đề này
Chạy như dịch vụ Linux
1. Chạy pulseaudio như daemon toàn hệ thống [tham khảo]
- Tạo tệp
/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 - Thêm
autospawn = novào cấu hình clientecho 'autospawn = no' | sudo tee -a /etc/pulse/client.conf > /dev/null - Thêm root vào nhóm pulse
sudo adduser root pulse-access - Kích hoạt và khởi động dịch vụ
sudo systemctl daemon-reload sudo systemctl enable pulseaudio.service sudo systemctl start pulseaudio.service
2. Chạy pi_webrtc và thiết lập tự khởi động khi reboot
- Tạo tệp
/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 - Kích hoạt và khởi động dịch vụ
sudo systemctl daemon-reload sudo systemctl enable pi-webrtc.service sudo systemctl start pi-webrtc.service
Cấu hình nâng cao
- Cần thêm micro và loa để giao tiếp hai chiều
Micro
- Xem liên kết để biết hướng dẫn đấu nối và kiểm tra micro
Loa
- Xem liên kết để biết hướng dẫn thiết lập loa
Giấy phép
- Dự án này được cấp phép theo Apache License, Version 2.0. Xem tệp LICENSE để biết chi tiết
Tóm tắt của GN⁺
- Dự án này cung cấp cách biến Raspberry Pi thành camera an ninh gia đình độ trễ thấp
- Sử dụng bộ mã hóa phần cứng v4l2DMA và WebRTC để vận hành thuần P2P mà không cần media server
- Nhiều người dùng có thể xem luồng trực tiếp cùng lúc, hữu ích cho camera an ninh gia đình
- Cơ chế signaling dùng MQTT hỗ trợ cả LAN lẫn truy cập từ xa
- Các dự án khác có tính năng tương tự gồm MotionEye và ZoneMinder
1 bình luận
Ý kiến trên Hacker News
Một người dùng cho biết trong lúc sửa nhà, họ định lắp một hệ thống an ninh để giám sát từ xa nhưng phát hiện ra rằng phần lớn tính năng đều cần Internet băng thông rộng
Một người dùng khác sống ở căn hộ trong khi xây nhà và muốn tạo video timelapse cũng như kiểm tra tiến độ công việc qua Internet
Một người dùng khác nữa đã cân nhắc dự án mediamtx với Raspberry Pi Zero WH
Một người dùng thắc mắc vì sao Raspberry Pi 5 không hỗ trợ mã hóa phần cứng v4l2
Một người dùng khác đang thử nhận diện người theo thời gian thực bằng mô hình yolov3-tiny
Một người dùng khác nữa đã đạt được mục đích tương tự bằng Sentry-Picam, đồng bộ với 3 thiết bị khác qua Syncthing và nối một script thông báo đẩy dựa trên sendxmpp
Một người dùng đã thực hiện dự án tương tự bằng Nvidia Jetson và hiện đang quan tâm đến reCamera
Một người dùng khác đang tìm một bo mạch sử dụng firmware mã nguồn mở
Cuối cùng, một người dùng thắc mắc liệu WebRTC có phải là giải pháp tốt nếu chỉ muốn ghi âm thanh hay không