关于开源定制化监控系统NVR的想法

2026年1月31日

想法

使用老旧笔记本电脑使用Docker运行Frigate NVR™程序来实现监控项目并借助Rclone实现定期上传至115网盘

传统监控系统基本上是直接被厂商定制化绑定,尤其是提供网络摄像头的各种方案

网盘的功能越来越强大,且支持api调用及rclone挂载

很多网盘动不动就是送几T空间

这些网盘基本都对视频在线预览有很好的支持

监控录像保存的逻辑基本上也是按照天的形式保存

那么只要自动化的将监控文件内容上传到网盘,在需要查监控的时候即可直接打开网盘在线播放,并且理论上数据丢失风险很低

想实时看监控的话,在内网中可以直接访问页面观看

在外网的话也有很多解决方案,frp?

这样似乎有一个巨大的缺点就是吃上传

粗略计算一下24小时下各个质量下的存储占用

画面质量 单路码率 5 路总计码率 24 小时总数据量
1080P (2MP) 2Mbps 10Mbps 约 105 GB
2K (4MP) 4Mbps 20Mbps 约 211 GB
4K (8MP) 8Mbps 40Mbps 约 422 GB

我来把一天划成工作时间和休息时间 工作时间:8:00 --- 22:00 共计 14 小时 休息时间:22:00 --- 8:00 共计 10 小时

一般家庭宽带的上传拿30M来计算 工作时间我们将上传限速15M,休息时间满速

工作时间理论可上传:96.26G 休息时间理论课上传:131.8G 理论状态下上传总量:224.06G image

对于8MP的话那是远远不够了,5路计算全4MP刚刚好,但是可以重点区域4MP,非重点区域2MP

但是时间长了运营商治不治那就不好说了

依赖项目

项目地址

https://github.com/blakeblackshear/frigate

官网

https://frigate.video/

思路

旧笔记本是联想小新Air15

旧电脑信息:

主板:Manufacturer: LENOVO Product: INVALID

处理器:11th Gen Intel(R) Core(TM) i5-1155G7 @ 2.50GHz

总内存:16167 MB

显卡:Intel(R) Iris(R) Xe Graphics | GameViewer Virtual Display Adapter

刷入主流流行Linux发行版本Debian 安装必要环境与Docker 配置rclone .......

需要准备的材料

image

备忘录

禁止合盖休眠

编辑文件:

sudo nano /etc/systemd/logind.conf

找到并修改这两行:

HandleLidSwitch=ignore

LidSwitchIgnoreInhibited=no

重启服务:

sudo systemctl restart systemd-logind

开启电池保护

长年插电运行,电池容易鼓包。联想 Ideapad 系列(包括小新)在 Linux 下支持固定在 60% 电量:

echo 1 | sudo tee /sys/bus/platform/drivers/ideapad_acpi/VPC2004:00/conservation_mode

注:路径可能因内核版本略有差异,可以通过

find /sys -name "conservation_mode"

查找具体位置。

HDD 外部硬盘的长效挂载

获取 UUID:执行 sudo blkid 找到你的HDD硬盘 UUID。

修改 fstab: 编辑 /etc/etc/fstab

添加如下行:

UUID=你的UUID /mnt/cctv ext4 defaults,nofail,noatime 0 2

nofail 参数非常关键:万一硬盘盒没上电,系统依然能正常启动,不会卡在启动界面。

Frigate 核心配置

在 docker-compose.yml 中分配显卡权限:

devices:
  - /dev/dri/renderD128:/dev/dri/renderD128 # 映射 Intel 核显

在 frigate.yml 中优化检测:

ffmpeg:
  hwaccel_args: preset-intel-qsv-h264 # 4路高清解码毫无压力

detectors:
  ov:
    type: openvino
    device: GPU # 利用 Iris Xe 的 80 个执行单元进行 AI 推理

错峰上传方案:Rclone 动态限速脚本逻辑

针对“今天传前天、白天限速、晚上全速”的构想,建议在 Debian 中使用 Systemd Timer 配合 Rclone: 限速配置:利用 Rclone 内置的 --bwlimit 参数实现时段控制。 逻辑示例

# 白天 06:00 到 23:00 限速 1.5M (12Mbps 左右)
# 晚上 23:00 到 06:00 不限速 (off)
rclone move /mnt/hdd/archive remote:backup \
  --min-age 2d \
  --bwlimit "06:00,1.5M 23:00,off" \
  --delete-empty-src-dirs

在 Frigate 中把“USB 拾音器”和“摄像头”结合

Frigate 内置的 go2rtc 模块可以像“搭积木”一样合并音视频流。 配置逻辑参考 (frigate.yml):

go2rtc:
  streams:
    counter_full_stream:
      - rtsp://admin:password@192.168.1.10/h265/main  # 摄像头的视频
      - ffmpeg:device?audio=hw:CARD=Device,DEV=0      # 你的 USB 拾音器音频

效果:Frigate 会实时将这两个不同来源的流压在一起,生成一个带高清音频的录像文件,存入 HDD硬盘。

拓扑结构

物理层

电力供应层

  • 墙上插座 --> 原装 65W 充电器 --> 拓展坞 PD 口 (100W 支持) --> 笔记本 USB-C
  • 墙上插座 --> 绿联硬盘盒电源适配器 (12V) --> 硬盘盒
  • 墙上插座 --> TP-LINK 交换机电源 --> 交换机

网络数据层

  • 5 路 IP 摄像头 --> Cat6 类网线 --> TP-LINK SG2210LPF (PoE 供电口 1-8)
  • TP-LINK 交换机 (第 9 号级联口) --> 网线 --> 小米拓展坞 RJ45 千兆网口

本地外设层 (全部连接至小米拓展坞 USB-A 口)

  • 绿联 3.5 寸硬盘盒 (内置 HDD硬盘)
  • 海康 DS-VM1 USB 麦克风阵列

系统逻辑架构

接入层

  • Video: Frigate 通过 FFmpeg 抓取交换机传来的 RTSP 视频流。
  • Audio: Debian 系统通过 ALSA/PipeWire 驱动识别 USB 麦克风音频设备 (/dev/snd)。

处理层

  • AI 识别: 利用 i5-1155G7 的 Iris Xe 核显,通过 OpenVino 进行人形/车辆过滤。
  • 混流 (MUX): Go2RTC 模块将 6mm 摄像头的画面与 USB 麦克风的声音实时合并。

存储层

  • 热数据: 实时视频帧缓存在内存 (SHM) 或自带 NVMe SSD 中
  • 温数据: 24 小时高清录像存入外挂的 HDD硬盘(UUID 挂载至 /mnt/cctv)
  • 冷数据: 凌晨时段,Rclone 脚本将“昨天”的录像加密上传至云端。

LeoKnox

Leo Leo Leo

文章评论