家里那台监控摄像头的原装内存卡循环覆盖写了不到四个月就彻底读不出盘了客服说这种耗损件不保。买张新的倒不贵但治标不治本监控天天在写卡寿命天然短。云存储倒是能绕开写卡问题可年费算下来又觉得肉疼。后来我把角落吃灰的那台树莓派翻出来接上一个旧USB摄像头再挂上夸克网盘的免费空间搭了一套能连续几个月不宕机的监控存储与回放系统视频按小时切片自动同步到网盘任何设备打开网盘就能回看。整个过程没有加一分钱硬件预算也没续任何会员这篇文章就是把完整方案和踩过的坑掰开揉碎讲一遍。1. 这个方案到底解决了什么内存卡和云存储的账其实都不好算1.1 内存卡监控的隐藏寿命问题很多人买摄像头包装里带一张TF卡就以为万事大吉。问题就在循环覆盖写这四个字上。监控摄像头不是录完就停而是写满了一个文件之后删除旧文件继续写这种高频率整块擦写正是TF卡最不擅长的场景。普通TF卡标称的擦写寿命通常是几百到上千次PEProgram/Erase听着够用但监控场景下每天写入量可以达到几十GB算上文件系统自身的写放大效应一张卡的实际消耗速度比你想象得快得多。再加上摄像头通常挂在室外或高温环境散热差卡的可靠性还会进一步下降。我之前那张原装卡四个月挂掉算是很常见的剧本。更麻烦的是TF卡一旦出现逻辑坏块往往是整卡读不出盘里面的监控记录一并消失想拿来做事后追溯都无从谈起。好一点的高耐用卡价格不便宜容量也受限制一个64G的卡按720P录像普通码率下也就顶两三天。用内存卡方案省了买云服务的心但每个月总要担心一次卡什么时候坏这种隐性成本其实挺高的。1.2 云存储订阅的隐性成本内存卡绕不开很多人转头看云存储。摄像头厂商的云存储是按月或按年订阅一个摄像头一年下来就是两三百块家里如果有三四个摄像头这个数字直接翻倍。另外一个容易被忽略的问题是云存储的录像文件往往封装在厂商私有格式里只能通过自己的App看如果某天不再续费历史录像还能不能顺利导出真说不准。相比之下用个人网盘做监控存储就不一样。夸克网盘这类通用网盘本身就提供免费容量上传的视频就是标准MP4文件电脑上能放、手机上能放就算以后不用这个网盘也能把文件下载回来自己存着。监控数据落在自己手里而不是厂商的封闭服务器里这是我认为最核心的价值。1.3 闲置单板机的再利用价值这套方案的另一半拼图是一台闲置的单板机。我这边用的是一台老树莓派3B当初跟风买的装了几个系统就一直在抽屉里吃灰。这种ARM板子性能不强但做监控采集绰绰有余。单板机的功耗非常低树莓派3B空载也就2.5W左右录像加上传时高负载顶到5W上下一年跑下来电费按0.6元/度算大概也就15到25块钱比起云存储年费基本可以忽略。更重要的是单板机是一台完整的Linux电脑上面跑什么脚本、装什么服务都是自己说了算不像摄像头内置的云存储那么封闭。闲置设备再利用这本身就是最环保的省钱方式。2. 先把架构理顺从摄像头到网盘视频文件应该怎么流转在动手写命令之前我建议先把整条数据链路想清楚。自建监控存储本质上就是完成三件事把摄像头画面变成视频文件把视频文件切分成适合上传和回放的小段再把小段文件安全地同步到网盘上。2.1 摄像头接入方式怎么选摄像头接入单板机常见的有三种方式我整理了一张对比表接入方式原理优点弱点USB摄像头UVC协议通过v4l2接口被系统识别便宜、即插即用、兼容性好线缆长度有限镜头素质普遍一般RTSP网络摄像头通过网线或WiFi取流安装灵活可PoE供电画质选择多需要摄像头本身支持RTSP协议CSI摄像头连接到单板机的CSI排线接口延迟低、画质稳定需要额外买专用模块比如OV5647配套镜头我最终用的是RTSP方案原因很简单旧的USB摄像头临时测试没问题但要想让摄像头安在墙外、单板机放在室内USB线的长度和稳定性都不够。RTSP摄像头只要和单板机在同一个局域网里一根网线或者WiFi就能把流拉过来。海康、宇视这类常见的监控品牌基本都支持RTSP设置里打开对应开关就行。2.2 视频分片策略为什么不能录一个大文件很多人第一直觉是录成一个MP4文件想看哪段拖到哪段。这个想法在实际运行中会带来三个问题一是单文件损坏风险。24小时不间断录制的文件只要中间有一次断电或者进程被杀整个文件从损坏点往后都可能打不开前面十几个小时的录像跟着陪葬。二是上传失败代价大。一个24小时的大文件动辄十几GB往网盘上传时中途断了就得重新传整个文件失败成本太高。三是回放体验差。网盘在线预览大文件时拖进度条要等半天转到哪个时间点都不顺畅。所以正确做法是按小时甚至按半小时切片。我这边用FFmpeg的分段输出功能每60分钟自动生成一个独立的MP4文件文件名为20250303_1400.mp4这种格式时间、录像段一目了然。即使某一段上传失败损失的也只是那一个小时画面其余文件完全不受影响。2.3 网盘挂载方案为什么alist加WebDAV最省心把切好的小视频传到夸克网盘有几种路线。最直接的是用夸克网盘官方客户端但问题是官方客户端是图形界面我这边是一台无头的单板机不可能常驻屏幕去点上传按钮更没法做无人值守的自动同步。我的做法是用alist这个开源网盘挂载程序配合WebDAV协议。alist可以把夸克网盘账号转换成一个本地的WebDAV服务单板机再把WebDAV地址挂载成目录于是上传到网盘就变成了把一个文件移动到本地目录整个过程完全可以用脚本自动化。这就像是你家里本来有一面墙的网络接口夸克网盘alist帮你做了一个标准的插座面板WebDAV接口任何支持WebDAV的设备或者软件插上去就能用不需要关心网盘背后的登录、签名、请求加密这些复杂逻辑。2.4 回放链路网盘目录就是你的录像档案柜回放需求有两种场景一种是想看某个时间点发生了什么另一种是想连续查看某一天的记录。这套方案里网盘里会自然形成一个按日期排列的目录结构比如home-cam/2025/03/20250303_1400.mp4在alist的网页界面里可以直接拖着进度条预览不用下载整个文件。手机上装夸克App登录同一账号也能直接在线播放这些MP4文件。本地如果还想留一份短期副本用VLC打开本地目录一样可以回看。3. 完整搭建流程采集、切片、上传、回放一条路走通3.1 单板机系统准备单板机我建议刷官方系统镜像树莓派用Raspberry Pi OS Lite就够了不需要桌面环境。装好系统之后第一步是把时区设置对这直接影响录像文件的命名时间sudo timedatectl set-timezone Asia/Shanghai sudo systemctl enable --now systemd-timesyncd时区不对或者没有NTP时间同步文件名里的时间就会错乱回放时找录像会非常痛苦。时间同步这块我用的是系统自带的systemd-timesyncd不需要额外装NTP服务。顺便说一句如果这一步你还在用TF卡给单板机跑系统录缓存建议把卡格式化成ext4而不是FAT32。FAT32是Windows和相机常用的格式在Linux下做持续写入性能差还有单个文件4GB上限的老毛病。ext4对日志文件系统支持更好长期写不容易出问题。3.2 摄像头取流确认网络摄像头先要在摄像头自己的配置页面里设置好两件事固定IP以及开启RTSP取流。固定IP非常重要不然摄像头重启之后IP变了单板机这边第二天就可能找不到源。取流地址格式通常是rtsp://用户名:密码摄像头IP:554/Streaming/Channels/101这种不同品牌有差异。在正式跑录制之前我习惯先用一条命令去验证这个地址是否有效ffprobe rtsp://admin:password192.168.1.64:554/Streaming/Channels/101如果能看到视频流的分辨率、编码格式等信息说明取流通道是通的。另外注意摄像头的主码流和子码流区分主码流清晰度高但码率大子码流适合常年连续录制对存储空间更友好。我这边监控场景选的是子码流分辨率720P足够看清门口动静。还有一个小细节很多品牌的摄像头默认限制同时取流的连接数一般也就4路左右。如果你一边在电脑上用App看实时画面一边让单板机拉流连接数可能会占满导致FFmpeg反复断连。遇到这种情况先把摄像头里的多余连接踢掉或者调大并发限制。3.3 FFmpeg采集服务配置采集部分我直接写成了systemd服务保证开机自启、崩溃自动拉起。核心是FFmpeg的这条命令/usr/bin/ffmpeg -rtsp_transport tcp \ -i rtsp://admin:password192.168.1.64:554/Streaming/Channels/101 \ -c copy \ -f segment \ -segment_time 3600 \ -segment_format_options movflagsfaststart \ -strftime 1 \ -reset_timestamps 1 \ /var/video/%Y%m%d_%H%M.mp4参数一个个解释-rtsp_transport tcp是让RTSP流走TCP协议默认的UDP在弱网环境容易丢包画面会花屏TCP更稳。-c copy表示不重新编码直接把摄像头传过来的H.264数据封装成MP4。这样单板机的CPU几乎不干活一部分性能留给上传和系统本身。这个选择很重要因为ARM板子的H.264软编码非常吃力硬编码配置又麻烦能直接copy就绝不要转码。-f segment和-segment_time 3600是分片配置每3600秒即一个小时生成一个新文件。-strftime 1让文件按系统时间命名所以我才能得到20250303_1400.mp4这样的文件名。-reset_timestamps 1重置每个分段的时间戳避免播放器里显示的时间轴从开机时间开始乱跑。systemd服务文件可以参考这样写[Unit] DescriptionCamera Segment Recorder Afternetwork-online.target [Service] ExecStart/usr/bin/ffmpeg -rtsp_transport tcp -i rtsp://admin:password192.168.1.64:554/Streaming/Channels/101 -c copy -f segment -segment_time 3600 -segment_format_options movflagsfaststart -strftime 1 -reset_timestamps 1 /var/video/%Y%m%d_%H%M.mp4 Restartalways RestartSec10 StandardOutputappend:/var/log/camrec.log StandardErrorappend:/var/log/camrec.log [Install] WantedBymulti-user.target做完这些先启动服务跑一个小时确认第一个切片文件正常生成再继续下一步。3.4 alist挂载夸克网盘与自动上传网盘上传部分我用alist把夸克网盘转成本机的WebDAV挂载。在不装图形界面的Linux系统里alist安装非常简单下载对应架构的二进制包、解压、启动服务即可。第一次启动后访问http://单板机IP:5244在管理页面设置管理员账号密码。在alist后台添加夸克网盘的存储时用手机夸克App扫码确认授权整个过程不用手动填什么复杂参数。然后打开alist的WebDAV开关记下生成的WebDAV地址、账号和密码。接下来在单板机上用rclone把WebDAV挂载成目录rclone mount qk:home-cam /mnt/qk --daemon --vfs-cache-mode writes这里--vfs-cache-mode writes很关键它让rclone在写文件时先在本地缓存临时文件写完再往网盘传避免直接流转到WebDAV时网络一抖动就上传失败的情况。上传逻辑我写成了一个简单的脚本大意是把本地/var/video里已经完成切片、并且5分钟内没有再变动的MP4文件移动到网盘对应月份的目录然后删除本地副本rclone move /var/video qk:home-cam/2025/03 \ --include *.mp4 \ --min-age 5m这条命令丢进crontab每5分钟执行一次就能做到近乎实时的自动归档。本地只保留最近几个小时的录像作为缓冲核心数据全在网盘里。3.5 回放验证链路全部搭好后回放验证这一步不能省。我在电脑上打开alist的Web页面进入home-cam/2025/03目录点开一个当天的MP4文件在线播放确认画质和时间轴都对。再用手机夸克App登录同一账号同样能直接播放拖动进度条也比较流畅。至此整条链路算是真正打通了。4. 跑了一周的稳定性复盘故障现象和完整排查链路链路搭好只是第一步连续跑才是真正考验。这一周里我遇到了一些问题这里把现象和排查思路整理出来。4.1 采集进程莫名消失跑了两天多我打开单板机查看录像目录发现最新的MP4文件停在了几个小时之前FFmpeg进程已经不见了。虽然systemd设置了Restartalways会自动拉起但我想搞清楚它为什么退出。查日志的路径是sudo journalctl -u camera-record.service --since 2 hours ago日志显示摄像头的RTSP连接被断开了。继续排查确认是摄像头连接数被某个App占满单板机这边取流失败后重复重试重试到某一次系统内存不足直接杀了进程。解决方案分两部分摄像头端把不用的实时预览连接清掉并把设备最大连接数调大单板机端把systemd的RestartSec10改成RestartSec30避免频繁重试把板子拖垮。改完之后跑了一周没有再复发。4.2 网盘挂载失效导致上传堆积另一个问题是alist的WebDAV挂载在某次网络调整之后变成失效状态但单板机这边rclone mount还挂在原路径没有任何报错。表现为本地/var/video的文件一直在增加但网盘没有新文件进来。排查的时候走了弯路一开始以为是rclone的问题后来才发现是alist后台的夸克网盘授权过期了。解决方法是进入alist后台重新扫码确认授权然后rclone mount里显示的文件目录就恢复正常了。这个问题的教训是监控链路里最怕的不是明显的报错而是一切好像正常但数据没动。我后来给上传脚本加了一个简单的心跳每次rclone move如果检测到网盘目录长时间没有新文件写入就往日志里打一条警告这样至少能尽快发现问题。4.3 时间同步问题还有一次发现文件的命名时间比实际时间慢了几分钟。查下来是系统在断电重启后NTP还没有完成同步FFmpeg就已经开始录了文件名跟着走了错误时间。这个问题在NTP服务正常后会自动纠正但如果摄像头和单板机的时钟差太多会导致回放时找不到对应时间段。我的处理办法是给systemd服务加了一个ExecStartPre在启动FFmpeg之前先执行一次立即NTP校准sudo systemctl restart systemd-timesyncd虽然系统自带的时间同步是周期性的但开机后强制校准一下能让命名时间更可靠。4.4 容量规划与滚存策略最后说一下容量。很多人在意网盘空间够不够存这个取决于码率和保留周期。我这边子码流720P实际码率在512kbps上下换算下来大约是每小时225MB、每天5.4GB。如果你的夸克网盘免费容量有限可以用更低的分辨率或者调低码率比如256kbps每天就只有2.7GB左右。码率配置每小时体积每天体积适合保留周期1Mbps450MB10.8GB大空间高清画质512kbps225MB5.4GB日常够用256kbps112MB2.7GB低清长保留网盘这边我按月份建立目录每个月的录像落在对应的文件夹里配合夸克网盘的清理旧文件功能超过保留周期的文件自动删除。由于本地只保留最近几个小时作为缓存内存卡不再是持续高频写入的状态之前那种几个月写坏一张卡的问题也就不存在了。最后再分享一点个人体会这套系统跑下来我最大的感受是真正需要关注的地方不在摄像头本身而在于采集进程和网盘授权这两个间接环节。第一周可能会频繁看日志调参数等稳定下来之后它就是一个安静运行的基础设施几个月都不用管。如果你也想动手试我的建议是先低分辨率、低码率把整条链路跑通确认切片、上传、回放三个环节都正常再逐步提高画质。稳定运行之后这台单板机剩下的性能还可以顺手挂点别的服务但监控链路本身保持简单、尽量少改动这才是长期稳定的关键。