กล้องวงจรปิดโอเพนซอร์สบนพื้นฐาน Raspberry Pi
(github.com/TzuHuanTai)- โปรเจ็กต์ที่เปลี่ยน Raspberry Pi ให้เป็นกล้องรักษาความปลอดภัยภายในบ้านแบบหน่วงต่ำ
- ใช้ตัวเข้ารหัสฮาร์ดแวร์ v4l2DMA และ WebRTC
- เล่นและดาวน์โหลดวิดีโอได้ในรูปแบบกล้อง P2P ล้วนโดยไม่ต้องมีมีเดียเซิร์ฟเวอร์
- ผู้ใช้หลายคนสามารถรับชมไลฟ์สตรีมพร้อมกันได้
- Raspberry Pi 5 หรือ SBC อื่น ๆ ไม่รองรับการเข้ารหัสฮาร์ดแวร์ v4l2 จึงต้องรันในโหมดเข้ารหัสด้วยซอฟต์แวร์
วิธีใช้งาน
- ดาวน์โหลดไฟล์ไบนารีล่าสุดจาก Releases
- ติดตั้งแอป Pi Camera และทำตามคำแนะนำ
ข้อกำหนดฮาร์ดแวร์
- Raspberry Pi (Zero 2W ขึ้นไป)
- โมดูลกล้อง CSI
- การ์ด micro SD อย่างน้อย 4GB
- ดิสก์ USB และอะแดปเตอร์ Micro-USB Male to USB-A Female
การตั้งค่าสภาพแวดล้อม
- ใช้ Raspberry Pi Imager เขียน Lite OS (Bookworm 64-bit) ลงในการ์ด micro SD
- ติดตั้งไลบรารีที่จำเป็น
sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6 - เพิ่มเนื้อหาด้านล่างลงใน
/boot/firmware/config.txtเพื่อเปิดใช้งานฮาร์ดแวร์ Raspberry Pi
ตั้งค่าcamera_auto_detect=0 start_x=1 gpu_mem=16camera_auto_detect=0เพื่อให้อ่านกล้องผ่าน v4l2 - เมานต์ดิสก์ USB [อ้างอิง]
- หากไม่ต้องการบันทึกวิดีโอ ให้ข้ามขั้นตอนนี้และไม่ต้องตั้งค่าแฟลก
record_pathตอนรัน - เมื่อระบบตรวจพบดิสก์ไดรฟ์ จะถูกเมานต์อัตโนมัติที่
/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 - หากไม่ต้องการบันทึกวิดีโอ ให้ข้ามขั้นตอนนี้และไม่ต้องตั้งค่าแฟลก
การรันแอปพลิเคชัน
- ปัจจุบัน MQTT เป็นกลไก signaling เพียงอย่างเดียว จึงต้องเตรียมเซิร์ฟเวอร์ MQTT ก่อนเริ่มแอปพลิเคชัน
- หากใช้งานแอปพลิเคชันเฉพาะภายใน LAN สามารถติดตั้งเซิร์ฟเวอร์ MQTT เช่น Mosquitto บน Pi เครื่องเดียวกันได้
- หากต้องการรีโมตแอ็กเซส แนะนำให้ใช้เซิร์ฟเวอร์ MQTT แบบคลาวด์ (เช่น HiveMQ, EXMQ)
- หากต้องการเข้าถึงเซิร์ฟเวอร์ signaling ระยะไกลผ่านเครือข่ายมือถือ ต้องตั้งค่า DDNS และพอร์ตฟอร์เวิร์ดดิ้ง
การรัน
- สามารถรันไฟล์ไบนารี
pi_webrtcพร้อมแฟลก-hเพื่อดูตัวเลือกทั้งหมด - เริ่มแอปพลิเคชันด้วยการตั้งค่าที่ต้องการ
เคล็ดลับ 1: Pi 5 ไม่รองรับการเข้ารหัสด้วยฮาร์ดแวร์ จึงต้องเอาแฟลก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_accelออกและตั้งค่า--v4l2_formatเป็นmjpegการเข้ารหัสวิดีโอจะจัดการโดย OpenH264 เคล็ดลับ 2: เมื่อตั้งค่าเป็น1920x1080เฟิร์มแวร์ฮาร์ดแวร์ดีโคเดอร์จะเปลี่ยนเป็น1920x1088แต่ isp/encoder ไม่ได้ปรับตาม ทำให้หน่วยความจำเกินขอบเขต หากตั้งเป็น1920x1088จะไม่มีปัญหา
การรันเป็นบริการ Linux
1. รัน pulseaudio เป็นเดมอนทั้งระบบ [อ้างอิง]
- สร้างไฟล์
/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 - เพิ่ม
autospawn = noในการตั้งค่าไคลเอนต์echo 'autospawn = no' | sudo tee -a /etc/pulse/client.conf > /dev/null - เพิ่ม root เข้าไปในกลุ่ม pulse
sudo adduser root pulse-access - เปิดใช้งานและเริ่มบริการ
sudo systemctl daemon-reload sudo systemctl enable pulseaudio.service sudo systemctl start pulseaudio.service
2. ตั้งค่าให้รัน pi_webrtc และเริ่มอัตโนมัติเมื่อรีบูต
- สร้างไฟล์
/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 - เปิดใช้งานและเริ่มบริการ
sudo systemctl daemon-reload sudo systemctl enable pi-webrtc.service sudo systemctl start pi-webrtc.service
การตั้งค่าขั้นสูง
- ต้องเพิ่มไมโครโฟนและลำโพงเพื่อรองรับการสื่อสารสองทาง
ไมโครโฟน
- ดูลิงก์สำหรับคำแนะนำเรื่องการต่อสายและการทดสอบไมโครโฟน
ลำโพง
- ดูลิงก์สำหรับคำแนะนำเรื่องการตั้งค่าลำโพง
ใบอนุญาต
- โปรเจ็กต์นี้เผยแพร่ภายใต้ Apache License, Version 2.0 ดูรายละเอียดเพิ่มเติมได้ในไฟล์ LICENSE
สรุปโดย GN⁺
- โปรเจ็กต์นี้นำเสนอวิธีเปลี่ยน Raspberry Pi ให้เป็นกล้องรักษาความปลอดภัยภายในบ้านแบบหน่วงต่ำ
- ใช้ตัวเข้ารหัสฮาร์ดแวร์ v4l2DMA และ WebRTC เพื่อทำงานแบบ P2P ล้วนโดยไม่ต้องมีมีเดียเซิร์ฟเวอร์
- ผู้ใช้หลายคนสามารถรับชมไลฟ์สตรีมพร้อมกันได้ จึงเหมาะสำหรับใช้เป็นกล้องรักษาความปลอดภัยในบ้าน
- กลไก signaling ที่ใช้ MQTT รองรับได้ทั้งการเข้าถึงภายใน LAN และการเข้าถึงระยะไกล
- โปรเจ็กต์อื่นที่มีความสามารถคล้ายกัน ได้แก่ MotionEye และ ZoneMinder
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ผู้ใช้คนหนึ่งพยายามติดตั้งระบบรักษาความปลอดภัยเพื่อเฝ้าดูจากระยะไกลระหว่างซ่อมบ้าน แต่พบว่าฟังก์ชันส่วนใหญ่ต้องใช้อินเทอร์เน็ตบรอดแบนด์
ผู้ใช้อีกรายหนึ่งอาศัยอยู่ในอพาร์ตเมนต์ระหว่างสร้างบ้าน และต้องการทำวิดีโอไทม์แลปส์พร้อมตรวจสอบความคืบหน้างานผ่านอินเทอร์เน็ต
ผู้ใช้อีกรายหนึ่งพิจารณาใช้โปรเจกต์ mediamtx กับ Raspberry Pi Zero WH
ผู้ใช้คนหนึ่งตั้งคำถามว่าทำไม Raspberry Pi 5 จึงไม่รองรับ v4l2 hardware encoding
ผู้ใช้อีกรายหนึ่งกำลังพยายามทำระบบตรวจจับคนแบบเรียลไทม์โดยใช้โมเดล yolov3-tiny
ผู้ใช้อีกรายหนึ่งใช้ Sentry-Picam เพื่อบรรลุเป้าหมายที่คล้ายกัน โดยซิงก์กับอุปกรณ์อีก 3 เครื่องผ่าน Syncthing และเชื่อมสคริปต์ push notification ที่อิงกับ sendxmpp
ผู้ใช้คนหนึ่งทำโปรเจกต์ลักษณะคล้ายกันด้วย Nvidia Jetson และตอนนี้กำลังสนใจ reCamera
ผู้ใช้อีกรายหนึ่งกำลังมองหาบอร์ดที่ใช้เฟิร์มแวร์โอเพนซอร์ส
สุดท้าย ผู้ใช้คนหนึ่งสงสัยว่า WebRTC เป็นโซลูชันที่ดีหรือไม่ หากต้องการบันทึกเฉพาะเสียง