ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

弃用云套餐,用树莓派和夸克网盘搭建免费监控存储回放系统

弃用云套餐,用树莓派和夸克网盘搭建免费监控存储回放系统 1. 为什么我要放弃云套餐和内存卡三个月烧了三张卡之后如果让我给“云存储”“内存卡”“摄像头”这三样排个坑我可以负责任地说内存卡排第一。家里装监控两年我前后买了三张高耐久TF卡最长的撑了四个月最短的不到一个月就写入速度掉到10MB/s最后被读卡器识别成“RAW”格式。云存储套餐也没好到哪去一年两百多只能回放最近三天换个清晰度还要另外加钱。当时我就想这生意做得实在太舒服了。后来我把客厅摄像头拆下来翻出抽屉里一台吃灰的树莓派Zero 2W朋友送的一只所谓“乞丐版”USB摄像头30万像素那种再挂上夸克网盘的免费容量自己搭了一套24×7监控存储与回放系统。整套系统跑下来的月度附加开销是零元前提是你手里也有这么一堆闲置设备。如果你一件闲置都没有按最便宜的方案补齐成本也就是一顿外卖钱。先别急着看配置我把需求拆开讲清楚。我要的是一个非常传统的监控场景客厅角落24小时不间断录制不追求实时直播但至少要能翻回去看一周内某个时间段发生了什么。晚上光线暗白天光线好画面不需要多高清能分清人形轮廓就够。这套需求放到商业产品里对应的是“云存储年费会员”和“TF卡连续写入”但这两样恰好是最不划算的消费。我最后一根稻草是一次回放。那天地下车库有人拿错了快递我调监控结果翻到APP里发现只能看三天前的三天前的数据已经被覆盖了。我下了个决心监控设备是自家的存储也应该尽量由自己控制。云端的“套餐”本质是把录像存到服务商的服务器里按天卖给你TF卡则是让一张卡在高温、连续写入的场景里扛一年两样都不符合我的预期。所以这套系统的核心思路就一句话让摄像头负责采集让闲置单板机负责本地切片让夸克网盘负责云端存档。采集、编排、存档三层分离每一层坏了都能单独替换而不是再换一台整套监控。这也是我希望你在读完这篇文章后能带走的东西。2. 硬件清点垃圾堆里凑出一套可用系统先说摄像头。如果你有旧的网络摄像头优先用网络摄像头只要支持RTSP协议后面会很省事。如果没有那只非常便宜的USB摄像头也能干关键在于它可以被Linux直接识别成视频设备一般叫“UVC免驱摄像头”。再退一步抽屉里的旧手机也能当摄像头安装一个IP摄像头App开启RTSP服务画质往往比你想象中好很多。这三种方案我都试过最后长期用的是“旧手机RTSP”因为画质最稳而且不用拖着USB线。然后是单板机。树莓派Zero 2W、树莓派3B、香橙派Zero2甚至那些已经被淘汰的电视盒子只要能刷入Linux系统并支持USB接口都能做这个项目的录制端。先别急着买新的先看看家里的旧设备。我手上的树莓派Zero 2W是当年买来玩GPIO的性能放到现在非常弱但跑一个ffmpeg录制进程绰绰有余。它的CPU只需要把摄像头送进来的视频流做切片不需要转码压力很小功耗也只有两三瓦。存储介质是容易被忽视的一环。我做第一版时偷懒把录像直接写进树莓派的TF卡结果一个月没到系统就卡成幻灯片。原因很简单监控是7×24小时连续写TF卡的写入寿命在这种场景下会迅速耗尽。后来我把系统盘和数据盘彻底分开系统还是跑在TF卡上但录像的保存路径指向USB口外接的U盘或者移动硬盘。U盘虽然没有宣传的“监控级寿命”但比TF卡耐造得多而且坏了换一张也很便宜。如果你手上没有U盘那用带供电的移动硬盘也可以但要注意供电。树莓派的USB口本身供电能力有限很多移动硬盘需要外部供电否则会出现掉盘、卡死。这是我的经验宁可多插一个有源的USB Hub也不要直接把移动硬盘插在主板上不然半夜掉盘一次录制进程就断了。我用到的硬件清单整理成了一张表你可以对照着找角色我实际用的最低要求备注摄像头旧手机IP摄像头AppRTSP输出支持UVC的USB摄像头或支持RTSP的IP摄像头实在没有用手机就算“捡垃圾”成功单板机树莓派Zero 2W能跑Linux ARM系统有USB口和网络接口树莓派、香橙派、旧电视盒子都行本地存储旧U盘32GBUSB 2.0以上容量至少16GB一定不要直接写TF卡上传代理一台常年开机的旧笔记本能装夸克网盘客户端即可家里有台式机也行如果需要低功耗可以选笔记本网络设备普通路由器能设置固定IP即可不做端口映射不需要公网IP这套系统真正花钱的地方几乎没有。如果你是一个设备都没有的纯新手那最省钱的做法是花20块钱买一只USB摄像头找一个二手ARM开发板再找一只U盘。夸克网盘的免费容量和客户端都不收费软件方面ffmpeg、Samba、Linux系统也都是免费开源的。唯一要付出的就是折腾时间我认为这很值得。3. 整体架构与数据流转录制和上传分开干很多人在自建监控时容易踩一个思维陷阱想用单板机把“录制上传”全包了。但现实是网盘客户端在Linux上并不总是有官方支持夸克网盘目前也没有稳定的Linux客户端。与其纠结怎么在单板机上跑客户端不如把系统拆开每层只做一件事。我的最终架构是这样的摄像头输出的视频流先进单板机单板机上的ffmpeg进程按固定时间间隔把视频切成一个个MP4文件存储在本地U盘上。然后我把U盘上的“监控”目录通过Samba共享到局域网家里那台旧笔记本作为上传代理运行夸克网盘PC客户端把共享目录里的文件自动备份到云端。需要回放的时候打开手机上的夸克App在云盘目录里按日期翻找即可。录制和上传分开有几个实际好处。首先录制端不依赖网盘APIffmpeg断流重连、本地磁盘清理都能在同一个系统里闭环处理哪怕云端服务哪天抽风录像还在本地不会丢。其次夸克网盘客户端的重试、断点续传机制是现成的不必自己写上传脚本省了很多维护精力。第三单板机的性能非常弱如果既要录制又要跑上传任务内存和CPU都可能吃紧分开以后压力小得多。文件目录结构我设计了很久最终用“日期/小时分钟”的方式。目录看起来是这样monitor/ 20250615/ 00-00.mp4 00-30.mp4 01-00.mp4 ... 20250616/ 00-00.mp4 00-30.mp4这样命名有一个好处文件名精确到分钟回放时直接根据时间点找对应文件不用打开播放器一个个试。而且按日期分子目录避免云盘里单个目录文件过多导致刷新卡顿。容量规划也要提前算一下。我以单路720P视频、H.264编码、码率512kbps为例一天的数据量大约是512÷8×86400秒÷10245.4GB。如果你用夸克网盘的免费空间通常不可能容纳一周5.4GB×737.8GB的录像所以必须压缩画质或者降低码率。我日常设置为320×240分辨率加较低码率画面基本能分辨人物动作和轮廓一天的数据量可以压到1.5GB左右。如果你希望关键时段清晰可以单独做运动检测触发这里先不展开。这里要特别说明夸克网盘在整个系统里只扮演“档案仓库”的角色。它不需要实时响应不需要秒级传输只要每天慢慢把新生成的MP4同步上去就行。因此就算非会员上传速度有限只要配置合理半小时的录像延迟十几分钟上传完成并不会影响事后回放。这也是这套系统能无缝跑起来的关键。4. 搭建录制端从刷系统到ffmpeg自动分段脚本录制端是整个系统最核心的部分也是我踩坑最多的地方。我以树莓派Zero 2W为例完整走一遍配置流程其他ARM单板机思路相同。第一步刷系统。我用的镜像是Raspberry Pi OS Lite无桌面版本省资源。刷完之后提前在boot分区里创建一个名为ssh的空文件用来开启SSH。如果你的网络是WiFi还需要在boot分区创建wpa_supplicant.conf文件内容大致是这样的注意国家区域要写CNcountryCN ctrl_interfaceDIR/var/run/wpa_supplicant update_config1 network{ ssid你的WiFi名称 psk你的WiFi密码 }开机后先用路由器后台找到树莓派的IP地址通过SSH连进去。我习惯给设备设置固定IP在路由器里做DHCP地址绑定防止IP漂移导致后面的共享目录失效。第二步装基础软件sudo apt update sudo apt install -y ffmpeg samba v4l-utils ntpdate sudo timedatectl set-ntp true第三步验证摄像头。如果是USB摄像头插上去后执行lsusb v4l2-ctl --list-devices正常情况下会看到一个video0设备节点。用下面这条命令抓一张测试图片确认画面没问题ffmpeg -f v4l2 -i /dev/video0 -frames:v 1 test.jpg如果是网络摄像头先用电脑或VLC验证一下RTSP地址能通然后在树莓派上测试ffmpeg -rtsp_transport tcp -stimeout 5000000 -i rtsp://账号:密码IP地址:554/stream1 -frames:v 1 test.jpg第四步写录制命令。对于USB摄像头我推荐把视频流转成H.264并切片mkdir -p /home/pi/monitor cd /home/pi/monitor ffmpeg -f v4l2 -input_format mjpeg -video_size 640x480 -framerate 15 -i /dev/video0 \ -c:v libx264 -preset veryfast -crf 30 \ -f segment -segment_time 1800 -strftime 1 \ monitor/%Y%m%d/%H%M.mp4这里几个参数说明一下-segment_time 1800表示每30分钟切一个文件-strftime 1允许文件名里用时间格式符%Y%m%d会生成日期目录%H%M表示小时分钟。如果你用的是RTSP网络摄像头可以直接用复制流模式CPU占用更低ffmpeg -rtsp_transport tcp -stimeout 5000000 -i rtsp://... \ -c copy \ -f segment -segment_time 1800 -strftime 1 \ monitor/%Y%m%d/%H%M.mp4注意-c copy是直接复制摄像头输出的压缩视频流不做转码。如果源流格式不标准MP4文件可能无法播放那就老老实实加-c:v libx264做转码。第四步里最关键的一环不是命令本身而是“保活”。因为ffmpeg进程一旦因为摄像头掉线、网络抖动或内存不足退出就不会自动回来。我写了一个简单的保活脚本本质是个看门狗#!/bin/bash CAMERA_INPUT/dev/video0 OUTPUT_DIR/home/pi/monitor while true do if ! pgrep -x ffmpeg /dev/null; then echo $(date) ffmpeg is not running, restarting... cd $OUTPUT_DIR ffmpeg -f v4l2 -input_format mjpeg -video_size 640x480 -framerate 15 -i $CAMERA_INPUT \ -c:v libx264 -preset veryfast -crf 30 \ -f segment -segment_time 1800 -strftime 1 \ $OUTPUT_DIR/%Y%m%d/%H%M.mp4 \ 2/home/pi/monitor_recorder.log fi sleep 15 done这个脚本的逻辑很简单每15秒检查一次ffmpeg进程是否存在不存在就重新拉起。为了更严谨还可以检查磁盘空间超过90%就清理最老目录。清理命令可以这样写df -h /home/pi/monitor | tail -1 | awk {print $5}如果空间告急就直接删除最早的日期目录。可以把这套检查逻辑合进同一个脚本里我用crontab让整个脚本每分钟执行一次既避免进程僵尸化又能定期清盘。第五步做成系统服务。这样断电重启后不需要登录去手动启动。创建/etc/systemd/system/monitor-record.service文件[Unit] DescriptionMonitor Recorder Service Afternetwork.target [Service] ExecStart/home/pi/record_watchdog.sh Restartalways RestartSec15 Userpi [Install] WantedBymulti-user.target然后执行sudo systemctl daemon-reload sudo systemctl enable monitor-record.service sudo systemctl start monitor-record.service到这一步录制端已经能稳定产出分段录像文件了。你可以先用手动方式跑一个多小时确认文件按30分钟一个分割然后继续配置上传端。5. 把录像送进夸克网盘共享目录与自动上传的配置细节单板机只负责录不负责传那上传这端怎么处理我在局域网里放了一台常年开机的旧笔记本上面安装了夸克网盘PC客户端。要让它自动备份第一步是把单板机上的录像目录变成共享文件夹。在树莓派上安装Samba之后编辑/etc/samba/smb.conf在文件末尾追加一个共享节[monitor] path /home/pi/monitor browseable yes read only no guest ok yes force user pi如果不想让局域网里任何设备都能直接看你的录像可以把guest ok改为no然后专门设置一个Samba用户和密码sudo smbpasswd -a pi保存配置并重启Samba服务sudo systemctl restart smbd在Windows笔记本上打开文件资源管理器地址栏输入\\树莓派IP\monitor如果能正常看到录像目录说明共享成功。为了让夸克客户端稳定识别我建议把这个路径映射成本地网络驱动器比如Z盘。右键“此电脑”选择“映射网络驱动器”输入共享路径勾选“使用其他凭据连接”填Samba用户名密码即可。接下来打开夸克网盘PC客户端。不同版本的界面可能不太一样但核心逻辑都是找“备份”或“同步”相关入口。我用的版本里有一个“自动备份文件夹”功能可以新建任务源目录选择刚才映射的Z盘目标目录在云盘里设为“监控录像”。关键的一点必须选择“单向上传”也就是本地文件新增时云端自动复制一份但云端若有删除操作不会反向删除本地文件。如果错选成“双向同步”哪天你在网盘里清理旧录像本地也会被删那就可能删掉尚未上传完的数据。夸克客户端识别网络驱动器这件事不同版本兼容性不同。我在笔记本上实测时直接把Z盘选进去偶尔会报“路径无效”解决办法是先把网络共享中的录像文件夹复制到一个本地临时目录然后让夸克备份这个本地目录。但这样会浪费一倍磁盘空间。后来我发现先确保Windows能通过Z盘访问再打开夸克客户端的目录选择框用左侧“此电脑”展开Z盘成功率会高很多。如果还是失败就升级客户端版本或者换用功能更完整的PC客户端。上传端还有一个现实问题非会员上传速度有限。如果你的网络上行带宽不高又长时间挂机很可能出现“本地不断生成新录像云端还没来得及传完”的积压。我解决这个问题的办法是把ffmpeg的分段时长从30分钟调整为20分钟每段的文件更小上传任务更细断点续传时损失更小。同时我在本地清理录像的策略上留了余量保留最近两天的本地文件等待云端的确认而不是录完就删。具体到数据一致性最保险的做法是“本地先留三天云端确认存在后再清理”。因为夸克客户端的上传状态不会直接暴露给本地脚本我采用了一个“三重时间戳”原则本地保留至少三天录像三天前的文件如果云盘空间足够就继续留不够了才删最老文件。这样即使上传失败只要客户端最终重试成功数据也不会丢。如果你家里没有常开电脑这条路就会走不通。这时候有两条变通路线一是换一个支持WebDAV或Linux官方客户端的网盘把rclone挂载到单板机上实现直接上传二是接受“单板机旧电脑”的组合把旧电脑看作整个监控系统的一部分。我标题里说的“不花一分钱”指的就是把这类闲置设备重新利用起来而不是硬要全部用单板机完成。6. 回放体验手机App和电脑端翻录像的正确姿势当云端开始积累录像之后回放这件事就变得非常轻松。手机端我直接用夸克App登录同一个账号进入“监控录像”目录按日期一层层点进去找到对应时间段的MP4文件点开就能在线播放。在线播放对网速有一定要求但监控分辨率本来就不高手机流量也能拉动。我实际使用中最大的感受是不需要安装专门的监控App也不需要记住厂商的账号体系普通网盘App就能完成这个任务。如果要在电脑上认真排查某件事我会先把对应日期的目录同步下来再用本地播放器打开。因为在线播放快进和拖动进度条时会有缓冲而本地播放器可以精准定位到秒。我用PotPlayer打开录像后开启1.5倍速或2倍速快速跳过空白时间效率非常高。文件名精确到分钟的好处在这里体现得特别明显比如我知道快递是下午2点40分左右被拿走的我只需要看2点30分和3点00分两个文件而不是把整个下午的视频全部拖一遍。还有一个不算缺点的缺点这套系统是“准实时”不是“实时直播”。ffmpeg每20分钟切一个文件夸克客户端再慢慢上传所以云端回放通常比实际时间滞后5到15分钟。如果你只是想晚上睡前看看白天家里发生了什么这个延迟完全可以忽略。但如果你想在手机上实时看孩子到家没有那这套系统不适合你应该保持单板机本地录像在局域网内用VLC实时拉流而不是依赖云盘回放。关于回放的检索我养成了一个小习惯每天晚上睡前打开夸克App浏览一下当天的录像目录结构把文件数量和时间间隔扫一眼。发现哪个时间段的文件缺失说明当时摄像头可能掉线了第二天就去检查录制端。这种“目录列表即健康状态”的方式比打开监控App的云回放界面更直观。如果你有多个摄像头同样可以在云盘里按摄像头名称分子目录比如“客厅”“阳台”“门口”再在子目录里按日期分。我的目录结构后来扩展成了这样监控录像/ 客厅/ 20250615/ 00-00.mp4 00-20.mp4 阳台/ 20250615/ 00-00.mp4这样回放时就能快速定位到具体设备不会混在一起。7. 长跑一年的排雷记录烧卡、时间漂移、掉线重连系统跑了大半年我用血泪换来了几条排雷经验值得一条条讲。第一死磕TF卡没有任何意义。我最初把录像存在树莓派的TF卡上一个月后系统开始频繁卡顿检查发现卡的smart信息已经接近寿命极限。后来换成USB外接U盘同样连续写入稳定跑了好几个月。所以如果你有条件请一定让本地存储跳过TF卡直接把数据目录指向U盘或者移动硬盘。U盘建议选大厂品牌至少是USB 3.0规格虽然树莓派Zero 2W只有USB 2.0速度但U盘的4K随机写能力比TF卡强太多。第二树莓派没有RTC断电重启后时间会错乱。如果系统时间不对ffmpeg生成的文件名就会错比如下午3点的录像写到上午10点这样回放时很难找。我配置了网络时间同步还在保活脚本里加了一小段每次检测到ffmpeg重启时先强制同步一次时间sudo ntpdate -u ntp.aliyun.com这样即使断电后时间漂移只要联网几分钟内就能校回来。第三USB摄像头掉线和网络摄像头断流是两类经典的故障。USB摄像头长期通电USB口供电不稳可能会让设备节点消失。我加了一个有源USB Hub问题明显改善。网络摄像头则要注意RTSP协议的重连参数我在ffmpeg命令里加上-stimeout 5000000意思是连接超时5秒如果流中断保活脚本会在15秒内自动重启进程。这个组合配合下来掉线时间基本能控制在分钟级以内。第四上传积压比录制失败更隐蔽。有一天我突然发现本地U盘快满了查了一下发现夸克客户端的自动备份任务不知什么原因停了可能是客户端更新后缺少权限也可能是网络断线导致任务阻塞。从那以后我每周检查一次U盘剩余容量如果容量持续下降就先看客户端是否还在运行。不要指望网盘客户端永远稳定它只是一个普通的普通软件也会更新、弹窗、锁死。第五同步方向一定要设对。我第一次配置夸克自动备份时误选了“双向同步”某天手动清理云端旧录像结果客户端把本地对应文件也删了。监控录像本身是“单向数据”云端只是副本不是主数据源。你应当把本地U盘视为第一优先级的存储云端当作备份和远程访问通道。第六安全底线不能越过。我没有把树莓派的SSH端口映射到公网也没有给摄像头开通UPnP。整条回放链路的远程访问完全依靠夸克网盘的账号体系。如果你手里的网络摄像头本身支持公网直连请务必把密码改成强密码并且关闭P2P穿透否则录像可能被别人直接拉流。系统安全不一定靠复杂防火墙有时候“不出现在公网”才是最有效的保护。最后再说一下功耗。树莓派Zero 2W加USB摄像头实测功耗在2.5W左右旧笔记本做上传代理大约10W一个月下来的电费折算后基本可以忽略。如果旧笔记本功耗太高可以考虑换一个低功耗的安卓盒子只要能跑夸克客户端或者浏览器上传效果一样。我目前这套组合已经持续运行了将近一年除了中间换过一次设置几乎没再动过它。如果你手头也正好有这些闲置设备不妨按这个思路搭一套。最简单的起步方式是先把摄像头接到单板机上打开ffmpeg录制一个下午确认能生成分段文件再装上Samba共享映射到电脑上最后把夸克网盘客户端自动备份配上。每一步都单独验证出了问题也容易排查。我个人的体会是自建监控真正难的从来不是命令而是接纳“录制和上传分离”这个思路以及愿意在前几天多做几次检查。等到系统稳定运行一周你几乎会忘记它的存在直到你需要翻回某一天录像的时候才想起来这堆垃圾换来了一个免费的云监控仓库。
返回列表