前言
你买了家用摄像头,却发现自己陷入了云存储陷阱:想看几天前的回放,就得每月按时交保护费。明明是自己家的监控视频,却不得不传到别人的服务器上,隐私泄露风险让人提心吊胆。退一步用SD卡吧?不仅容量有限,关键时刻还容易读写错误,找段关键录像简直像大海捞针。
上期我们介绍了通过Micam三件套将摄像头接入飞牛NAS的方案,成功实现了本地化存储。但方案对低配设备不够友好,特别是N1盒子这种只有2GB内存的设备,跑3个容器确实有些吃力。
问题就在这里——Micam方案其实是之前的替代方案,因为当时Go2RTC还未支持小米摄像头协议。虽然Micam能实现功能,但3个容器同时运行会占用过多系统资源,对低配设备不够友好。
本期我们就来解决这个痛点。通过Go2RTC+EasyNVR双容器方案,容器数量从4个减少到2个,内存占用大幅降低,部署配置也更简单。读完这篇文章,你将能用更轻量的方案,在低配设备上流畅运行摄像头本地存储,真正告别云存储月费,实现永久免费、无限扩容的私有化监控系统。
1 什么是Go2RTC?

Go2RTC 是一款功能强大的通用摄像头流媒体服务器,专为解决安防监控领域的视频协议兼容性与低延迟传输难题而设计。它能够作为一个高效的中转网关,将各类传统的监控视频流汇聚并转换为现代化的 Web 友好协议。
作为核心组件,Go2RTC 具备以下关键特性:
- 多协议互通:原生支持 RTSP、RTMP、HTTP-FLV、WebRTC、MSE、HLS、MJPEG 等几乎所有主流流媒体协议,实现了不同设备与平台间的无缝对接。
- 极致低延迟:通过 WebRTC 和 MSE 技术,它能将视频传输延迟降低至毫秒级,提供真正实时的监控体验。
- 轻量级架构:采用 Go 语言开发,编译为独立的二进制文件,零外部依赖。这意味着它不仅部署简便,而且对硬件资源占用极低,非常适合在 NAS、树莓派等边缘设备上长期运行。
- 灵活扩展:既支持 Docker 容器化部署,也能完美集成到 Home Assistant 等智能家居系统中。
在本方案中,Go2RTC 扮演着“流媒体引擎”的角色:它负责从摄像头拉取原始视音频流,经过实时处理后,不仅能直接通过浏览器流畅播放,还能将标准化的视频流分发给 EasyNVR 进行持久化存储。
2 准备阶段
2.1 部署环境和系统说明
本期教程以用N1刷入arm版的飞牛Nas系统为例,其他Nas系统支持Docker均可(如:绿联Nas、极空间Nas,群晖Nas等)。
如果同样有想刷入arm版飞牛Nas的小伙伴可以先移步这篇:7年矿渣重生!N1盒子刷入ARM版飞牛NAS!(保姆级教程) 文章。目前N1的arm版飞牛固件已支持无线网卡驱动,可以通过连接WiFI的方式来进行联网。可以刷入453版固件,然后进行OTA升级至当前最新1.1.18系统版本即可。
N1飞牛Nas系统arm版固件资源-453版下载地址如下:
123永久云盘链接:
https://www.123865.com/s/3jOKVv-Y4OzH?pwd=1314#
提取码:1314
2.2 启动Docker服务
在部署之前,首先确保你的Docker为启动状态,在飞牛Nas首页,点击Docker图标,进入应用内启动Docker服务:

PS:建议存储位置选择挂载的外部存储空间。
2.3 启用SSH服务并连接
进入飞牛Nas的系统设置,来到SSH项,将SSH功能设置为启用:

设置好以后,接着电脑上摁Win + X键,选择终端(管理员),打开PowerShell窗口(cmd命令提示符窗口也可以的):

接着,输入如下命令连接你的飞牛NAS(也可以使用其他ssh工具):
# ssh 你的Nas用户名@你的Nas系统IP地址
ssh n1@192.168.50.228

连接成功后,输入如下命令,然后输入密码,切换至root用户:
sudo -i

这样就成功连接上了飞牛Nas的ssh终端啦!
3 Docker部署Go2RTC
在终端,输入如下docker命令,进行一键部署:
mkdir -p $(pwd)/go2rtc/config && touch $(pwd)/go2rtc/config/go2rtc.yaml && docker run -d --name go2rtc --restart always --network host -v $(pwd)/go2rtc/config:/config alexxit/go2rtc
命令会进行创建/go2rtc/config目录和创建go2rtc.yaml配置文件,并且执行Docker一键部署命令,如下图:

部署完成后,输入如下命令,查看运行状态:
docker ps

可以看到,status(状态)显示为UP,代表其运行中,接在在浏览器访问你的飞牛Nas的IP地址+1984端口即可访问到web页面:
http://192.168.50.228:1984

可以看到,成功的访问到页面啦!go2rtc就部署好了!
4 配置小米摄像头获取RTSP地址
首先,点击顶部导航栏的add菜单,进入如下页面:

接着,滚动到底部,展开Xiaomi这一栏,填写你的小米账号信息,进行登录,然后点击加载设备:

复制url,然后滚动到顶部,选择顶部导航栏的config菜单,在yaml配置区输入如下配置:
# =================================================================
# GO2RTC 示例配置文件
# -----------------------------------------------------------------
# 【使用说明】
# 1. 访问后台:http://宿主机IP:1984 (默认账号: admin / 密码: password)
# 2. RTSP构造:若取消rtsp段落注释,播放地址如下:
# - 4K流: rtsp://admin:password@宿主机IP:8554/cam_4k
# - 标准: rtsp://admin:password@宿主机IP:8554/cam_std
# 3. 参数说明:
# - subtype=3: 锁定 4K 极清分辨率
# - subtype=2: 锁定 1080P/2K 高清分辨率
# - #audio=pcmu: 强制音频解码,解决部分设备无声问题
# =================================================================
api:
listen: ":1984"
username: admin
password: "password"
# rtsp:
# listen: ":8554"
# username: admin
# password: "password"
streams:
xiaomi:
- "you_xiaomi_url&subtype=2#video=copy#audio=pcmu"
xiaomi_4k:
- "you_xiaomi_url&subtype=3#video=copy#audio=pcmu"
xiaomi:
"USER_ID": V1:EXAMPLE_TOKEN
即如下图所示:

设置完成后,点击Save & Restart按钮,进行保存并且重启,接着回到首页,点击stream进去,验证是否能播放:

如下能够出现画面即代表配置成功啦:

由于前面配置中开启了rtsp的用户名和密码功能,以xiaomi_4k这个流为例,所以rtsp的流地址应为:
# 无密码的构建方式
rtsp://宿主机IP:8554/xiaomi_4k
# 开启密码认证的构建方式
rtsp://admin:123456@宿主机IP:8554/xiaomi_4k
在PotPlayer播放器中进行演示,按ctrl + u快速打开播放网络地址窗口,输入rtsp的流进行测试:

播放成功,这样我们就完成了Go2RTC的部署和测试,摄像头视频流已经成功转换为标准RTSP协议。
5 Docker部署EasyNVR
现在我们已经有了标准的RTSP视频流,接下来就需要将这些流接入EasyNVR进行录像存储和管理。EasyNVR作为专业的NVR系统,能够提供录像、回放、告警等完整的监控功能。
5.1 EasyNVR介绍

EasyNVR 是一款专业的软件型网络录像机(Network Video Recorder,NVR),用于集中管理和录像多路网络摄像头的视频流。它可以替代摄像头厂商提供的云存储服务,将录像统一存储在本地 NAS 或服务器上,实现完全的本地化管理。
EasyNVR 的核心功能包括:多摄像头接入,支持 RTSP、RTMP、ONVIF 等标准协议,并能够接入不同品牌和型号的摄像头,实现统一管理;本地录像存储,视频数据直接写入 NAS 或本地服务器,不依赖厂商云服务,从而避免长期订阅费用,同时支持长期录像和循环覆盖策略;实时监控与历史回放,通过 Web 界面集中管理所有摄像头,可以查看实时画面、快速定位历史录像,并支持多路同步播放和时间轴浏览;稳定运行,可在 NAS、迷你主机或家用服务器上 7×24 稳定运行,Docker 部署支持跨平台、快速安装和升级。
5.2 Docker一键部署EasyNVR
回到N1的终端窗口,输入如下命令,查看磁盘占用及情况:
df -h

可以看到,外置存储大小一共239G,挂载的根路径为vol1,所以我们需要将录像存储路径改为该位置,首先在该位置单独创建一个文件夹:
mkdir -p /vol1/EasyNVR
cd /vol1/EasyNVR
然后进行一键部署EasyNVR(注意替换存储路径):
docker run -d --name easynvr --restart always --network host --log-opt max-size=50M -v "$PWD/configs:/app/configs" -v "$PWD/logs:/app/logs" -v "$PWD/temporary:/app/temporary" -v /vol1/EasyNVR:/app/r -v "$PWD/stream:/app/stream" registry.cn-shanghai.aliyuncs.com/rustc/easynvr_arm64:latest
如下图所示:

接着,在浏览器中访问你的飞牛Nas主机ip地址+10000端口,即可访问到EasyNVR页面了:

5.3 初始化登录EasyNVR
访问到EasyNVR页面后,直接点击页面的登录按钮即可进入首页,然后语言设置直接选择简体,确定即可:

属性配置为你的局域网地址,一般自动获取正确,不用修改,直接点击确定即可:

开放端口页面,默认无需操作,直接下一步即可:

在重置账号页面,创建一个新的管理员账户,点击确定:

这样就完成初始化操作啦,使用新的账号进行登录,即可进入EasyNVR首页:

6 将RTSP流接入EasyNVR
前面已经介绍了EasyNVR支持接入 RTSP、RTMP、ONVIF 等标准协议,并能够接入不同品牌和型号的摄像头,实现统一管理。简单说一下区别:RTSP 是纯视频流协议,只能拉流观看,不支持云台控制;RTMP 主要用于推流场景,同样不支持设备控制;而 ONVIF 是一套完整的设备管理标准,除了拉流外还支持云台控制、设备发现、参数配置等功能,如果你的摄像头支持 ONVIF,优先推荐使用它接入。
首先打开EasyNVR的首页,然后选择设备列表菜单,点击添加按钮:

这里由于是RTSP协议地址,所以选择PULL,下面也可以看到提示为接入设备RTSP、HTTP、TCP实时流,然后填写好拉流地址,点击确定:

点击确定后,就可以看到你的设备添加上来了,可以看到在线状态:

点击播放图标,点击进入,然后可以看到录像计划显示为未录像,这里直接将其设置为,这样就会一直录制啦:

点击下方的直播中按钮,即可进入到观看页面:

如下图所示:

可以看到,该直播预览页面集成了多协议实时播放、线路切换、云台控制与参数可视化等能力,用户可根据实际场景在 WebRTC、HTTP-FLV、RTMP、RTSP 等协议间自由切换以兼顾延迟与兼容性;在视频播放的同时,页面还实时展示分辨率、编码格式、传输方式、码率等关键流媒体信息,便于调试与排障;若视频流协议源本身支持云台控制,还可直接在页面中完成方向控制、变倍与速度调节,实现从预览到运维的一体化操作。
7 查看录像回放
前面设置好了录像计划,设置的为每天,设置好后就会即刻开始录像。我们回到首页,选择菜单的录像回放:

我们直接点击查看图标,即可进来回放页面了:

不仅回放功能,还支持选择指定时间段进行下载:

好啦,基本设置就完成啦,EasyNVR还拥有更多功能值得你去探索!
8 穿透EasyNVR实现公网访问
到这里,EasyNVR 已经在飞牛 NAS 上跑起来了,录像也都存在本地硬盘上,彻底告别了云存储月租费。但问题来了:虽然各家摄像头 APP 也能看实时画面,但想回看历史录像就要交钱,而且家里几个不同品牌的摄像头还得装好几个 APP,管理起来很麻烦。
有了 cpolar 内网穿透,这些问题就迎刃而解了。只需简单配置,就能让 EasyNVR 通过公网地址随时随地访问——不仅能看实时画面,更重要的是免费回放本地存储的所有录像。而且一个链接就能分享给家人,不用每个人都装 APP、注册账号,浏览器打开就能看。
8.1 什么是cpolar?

- cpolar 是一款内网穿透工具,可以将你在局域网内运行的服务(如本地 Web 服务器、SSH、远程桌面等)通过一条安全加密的中间隧道映射至公网,让外部设备无需配置路由器即可访问。
- 广泛支持 Windows、macOS、Linux、树莓派、群晖 NAS 等平台,并提供一键安装脚本方便部署。
8.2 安装cpolar
在前面连接的飞牛终端中输入如下命令,一键安装cpolar:
sudo curl https://get.cpolar.sh | sh

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)
sudo systemctl status cpolar

8.3 注册及登录cpolar web ui管理界面
官网链接:https://www.cpolar.com/
访问cpolar官网,点击免费注册按钮,进行账号注册

进入到如下的注册页面进行账号注册:

注册完成后,在浏览器中输入飞牛NAS的IP地址+9200端口访问 web ui管理界面:
http://192.168.50.228:9200/

输入刚才注册好的cpolar账号登录即可进入后台页面:

8.4 穿透EasyNVR的WebUI界面
点击左侧菜单栏的隧道管理,展开进入隧道列表页面,页面下默认会有 2 个隧道:
- ssh隧道,指向22端口,tcp协议
- website隧道,指向8080端口,http协议(http协议默认会生成2个公网地址,一个是http,另一个https,免去配置ssl证书的繁琐步骤)

点击编辑website的隧道,这里设置名称为easynvr方便辨识,然后本地地址填写10000端口系统的访问地址,地区这里选择的China Top,然后点击更新:

接着,点击左侧菜单的状态菜单,接着点击在线隧道列表菜单按钮,可以看到有2个easynvr的隧道,一个为http协议,另一个为https协议:

接下来在浏览器中访问easynvr隧道生成的公网地址,这里以https为例:

可以看到成功的访问到EasyNVR的页面啦!不过随机域名方式适合预算有限的用户。使用此方式时,系统会每隔 24 小时 左右自动更换一次域名地址。对于长期访问的不太友好,但是该方案是免费的,如果您有一定的预算,可以查看固定域名方式,且访问更稳定哦。
9 固定二级子域名
随机域名虽然免费,但每 24 小时左右会自动更换一次,每次变化都要重新记地址、重新分享链接,用起来确实不太方便。如果你希望拥有一个固定不变、简短易记的专属域名,只需升级 cpolar 任意付费套餐,即可配置固定二级子域名,彻底告别域名频繁变化的烦恼。下面我们来看看如何操作。
首先,进入官网的预留页面:
https://dashboard.cpolar.com/reserved
然后,选择预留菜单,即可看到保留二级子域名项,填写其中的地区、名称、描述(可不填)项,然后点击保留按钮,操作步骤图如下:

列表中显示了一条已保留的二级子域名记录:
- 地区:显示为China Top。
- 二级域名:显示为easynvr。
注:二级域名是唯一的,每个账号都不相同,请以自己设置的二级域名保留的为主
接着,进入侧边菜单栏的隧道管理下的隧道列表,可以看到名为easynvr的隧道:

点击编辑按钮进入编辑页面,修改域名类型为二级子域名,然后填写前面配置好的子域名,点击更新按钮:

接着来到状态菜单下的在线隧道列表可以看到隧道名称为easynvr的公网地址已经变更为二级子域名+固定域名主体及后缀的形式了:

这里以https访问测试一下:

访问成功,让我们再进行登录测试一下:

成功登录!以后你不管是去公司上班,还是外出旅游,都可以通过这个固定的公网地址,随时随地打开 EasyNVR,不仅能实时查看家里的情况,还能随意回放之前的录像。而且,这个地址是永久固定的,不用再担心过段时间就变了,是不是超级方便!
总结
通过本文的完整教程,你已经成功实现了小米摄像头的本地化存储方案。相比往期的Micam三件套方案,本次的Go2RTC+EasyNVR双容器方案在性能和易用性上都有了显著提升,真正做到了从”云存储依赖”到”完全自主”的技术跨越。
这套方案的突出优势体现在:
- 容器数量减少:从4个容器精简到2个,内存占用大幅降低
- 部署更简单:Go2RTC单容器即可完成流媒体转换,无需复杂的转发服务
- 性能更稳定:在N1盒子等低配设备上也能流畅运行
现在,你的家用摄像头已经成功升级为专业的安防监控系统,每一秒录像都安安稳稳地躺在你自己的硬盘里。告别被平台”割韭菜”,真正掌握数据的”生杀大权”!



