把吃灰的电视盒子,改成一台不花月租的监控

把吃灰的电视盒子,改成一台不花月租的监控

我家里一直想装个监控。可看了一圈市面上的家用摄像头,要么按月收云存储费,要么把画面传到厂商服务器上,等于你卧室、客厅的画面在别人机房里存了一份。买台成品的硬盘录像机,动辄上千,还得专门布线。

后来我想通了。家里其实躺着两样早就被忘掉的东西,一个吃灰的电视盒子,刷了 Armbian,功耗五瓦,几十块钱,还有一个闲置的 USB 摄像头,十几年前那种都行。这两样拼起来,就是一套数据不出家门、一分月费不交、24 小时自己跑的监控。

整套折腾了大半个月,拢共就三样,盒子、摄像头、再加一个闲置的希捷移动硬盘,折算下来二百出头。代码是一个 app.py 文件,650 行不到,纯 Python 标准库,连 pip 都不用装。

它能干嘛

说几个我做完之后最常用的场景。

人在外面,掏出手机开浏览器,输入盒子 IP 加 8080 端口,画面就出来了,延迟半秒左右。画面右上角有个时间水印,是直接烧进像素里的,预览有、录像也有,后期改不掉,真要出了事,这玩意儿能当证据。

录像用 H.264 压过,体积只有流复制的四分之一,24 小时大概 60G。这个决策我走过弯路,一开始图省事用流复制,24 小时直接录了 240G,切到 libx264 之后砍到 60G,整整四分之一,关键是浏览器原生就能播,不用装任何插件。

只保留最近 24 小时,超时自动删,磁盘永远不会满。为什么是 24 小时,监控这东西,真正有价值的就是出事前那一段,存太久反而是负担。

一个 ffmpeg 进程,干两件事

这套系统最核心的设计,是一个 ffmpeg 进程只解码一次,然后分流成两路。

一路 720p、15 帧,H.264 压完写进希捷硬盘当录像。另一路缩到 640×360、12 帧,压成 MJPEG,通过 Python 内置的 HTTP 服务推给浏览器。

这里有几个我实测出来的坑,值得单独说。很多人第一反应是上 1080p,我试了,盒子转 1080p 只能跑到 0.78 倍速,跟不上实时,降到 720p 直接 0.99 倍速,稳了。还有个隐藏坑,这摄像头标称 30 帧,实际只出 17 帧,所以我录像只取 15 帧,几乎没损耗,还省 CPU。

内置的 Web 服务也没用 Nginx,就是 Python 的 ThreadingHTTPServer 直接广播 MJPEG 帧流,顺手做了 Range 请求,浏览器才能拖进度条。

三层自愈,外加一个挂载守卫

可靠性是我投入精力最多的部分。三层兜底,应用内看门狗 15 秒收不到帧就判定断流,重启采集。ffmpeg 异常退出,supervisor 三秒拉起。整个应用崩了,systemd 五秒拉起,还带开机自启。

但最有意思的是硬盘被拔这个场景。我专门写了个挂载守卫线程,一旦检测到移动硬盘掉线,立刻停掉 ffmpeg,整个系统进入等待。关键在这,绝不在系统盘那个 eMMC 上写一个字,那玩意儿写坏一个块,整个盒子就废了。

网页上会老老实实显示「存储盘未挂载」,等你把硬盘插回去,automount 自动挂上,守卫周期检测到就续上录像,全程零干预。

断网不影响录像。摄像头被拔,插回去自愈。断电,来电开机自启。这些我全部实测过,各故障场景的结果整理在下面这张表里。

故障 系统怎么处理 怎么恢复
断网 录像不依赖网络,照常录,只是实时预览暂时打不开 网络恢复就能看,零干预
摄像头被拔 ffmpeg 退出,supervisor 每 3 秒重试 插回自动恢复
硬盘被拔 挂载守卫 10 秒内停掉采集,绝不写系统盘,网页提示未挂载 插回自动挂载并恢复录像
进程崩溃 supervisor 3 秒拉起 ffmpeg,应用崩了 systemd 5 秒拉起 自动
断电重启 systemd 开机自启 + fstab 自动挂硬盘 自动
磁盘写满 24 小时循环覆盖 + 20G 水位保护 自动

实测跑下来,转码模式 CPU 占一半,内存 240M,盒子资源还有富余。服务端还限制了内存上限 500M,不会把盒子拖垮。

有几个不算故障的小毛病,顺便说清楚。摄像头刚插上、或者前一个进程被强杀后立刻重开,前几秒会吐坏帧,程序会自动丢掉这些坏帧,日志里可能冒一条 No JPEG data found,过几秒自己好。断电那一刻正在写的那个分段,最多丢 10 分钟,已经写完的段不受影响。

谁适合用它

有闲置盒子、树莓派、旧电脑,配个旧摄像头,想低成本搭监控的。养宠物、家里有小孩或者老人,出门想随时瞄一眼的。开小店、出租屋、仓库,需要循环录像又不想付云存储费的。还有最看重隐私,坚决不让家里画面上传到第三方服务器的。

其实上面这几类人,核心就是一句话,不想让家里画面出家门。

跟买成品摄像头比,赢在哪

维度 成品云摄像头 这套方案
成本 月费 + 设备溢价 零月费,用闲置硬件
隐私 画面经厂商服务器 数据不出家门
存储 云存储或买卡 大容量硬盘,931G 随便存
可控性 黑盒,厂商说了算 全部开源,参数随便调
断电自愈 部分支持 完整自愈体系

当然它也要点门槛,会敲 ssh 就行,换来的是完全掌控。

三步跑起来

bash 复制代码
# 1. 目标机装 ffmpeg
sudo apt-get install -y ffmpeg

# 2. 上传程序 + 装 systemd 服务
bash deploy.sh   # 一键脚本,Windows Git Bash 也能跑

# 3. 浏览器访问
http://<你的盒子IP>:8080

配置都集中在 config.ini,想改保留时长、码率、水印字号,改完重启就行。我顺手把它接进了之前搭好的 Samba 共享,录像目录能直接映射成 Windows 网络盘看。详细的部署步骤、运维命令、容灾矩阵,仓库 README 里都写清楚了。

最后

一个吃灰的盒子,一个旧摄像头,一份 650 行不到的代码,就换来一套数据不出家门、不收费、断了电也能自己爬起来的监控。我把代码和配置都开源了,欢迎去仓库 Star、Fork、提 Issue,更欢迎你自己在家里跑起来。

如果你也在折腾家庭监控,或者想把这套思路用到工位、仓库、小工作室,评论区告诉我你的场景。

项目地址,https://gitee.com/gfdr5/home-surveillance-system

相关推荐
ye150127774551 小时前
220V转5V单片机供电电源芯片WT5102
单片机·嵌入式硬件·其他·硬件工程
OPEN-F1 小时前
Python进阶教程:Git版本控制与团队协作
git·python·elasticsearch
HUI-4741 小时前
EG12523|集成 600V 半桥驱动,带内置正激恒流功能的正反激 PWM 控制器
单片机·嵌入式硬件
ellenwan20261 小时前
2026年量化入门:先连起概念、规则和简单实现
人工智能·python
2601_966799041 小时前
酷嗨米J300:单相机三平台同步推流,硬件级方案告别卡顿与限流
嵌入式硬件
謓泽1 小时前
『51单片机』AD/DA
单片机·嵌入式硬件·51单片机·模拟·ad·da·謓泽
2601_966949652 小时前
Python 量化数据质量校验:如何确保股票历史日线数据不存在缺失交易日?
开发语言·人工智能·爬虫·python·量化策略·量化·quantdash
circuitsosk2 小时前
Python 文件读写与上下文管理器:with 语句为什么是最佳选择
java·服务器·python·文件操作·上下文管理器·contextlib
whcyhhh2 小时前
头歌实践教学平台:数据科学与大数据技术导论(七下)
大数据·数据库·python