低配N1也能搭家庭录像中心:Go2RTC与EasyNVR双容器实战

前言

很多家用摄像头虽然能够在官方App中查看实时画面,但一旦想保存更长时间的录像,就会遇到内存卡容量有限、云存储需要持续订阅的问题。对于已经有NAS的家庭,把录像保存在自己的硬盘里会更灵活。

真正麻烦的地方在于,并不是所有摄像头都能直接提供标准RTSP地址。特别是部分小米摄像头,需要先处理账号认证和私有视频流,才能继续接入录像系统。

之前常见的Micam组合方案能够解决这个问题,但需要同时运行多个容器。对普通NAS影响不大,放在只有2GB内存的N1盒子上长期运行时,资源占用和维护复杂度都会比较明显。

这次采用Go2RTC和EasyNVR组合:Go2RTC负责登录小米账号、获取摄像头画面并转换为标准RTSP流,EasyNVR负责持续录像、历史回放和文件管理,整个流程只需两个核心容器。

本文会在ARM版飞牛NAS中完成Docker与SSH准备,部署Go2RTC、配置小米摄像头视频流,再把生成的RTSP地址接入EasyNVR。最后通过 cpolar 配置公网入口,实现外出时查看实时监控和本地录像。

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等)。

目前N1的arm版飞牛固件已支持无线网卡驱动 ,可以通过连接WiFI的方式来进行联网。可以刷入453 版固件,然后进行OTA 升级至当前最新1.1.18系统版本即可。

2.2 启动Docker服务

在部署之前,首先确保你的Docker为启动状态,在飞牛Nas首页,点击Docker 图标,进入应用内启动Docker服务

**PS:**建议存储位置选择挂载的外部存储空间。

2.3 启用SSH服务并连接

进入飞牛Nas的系统设置,来到SSH项,将SSH功能设置为启用

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

接着,输入如下命令连接你的飞牛NAS(也可以使用其他ssh工具):

bash 复制代码
# ssh 你的Nas用户名@你的Nas系统IP地址
ssh n1@192.168.50.228

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

shell 复制代码
sudo -i

这样就成功连接上了飞牛Nas的ssh终端啦!

3 Docker部署Go2RTC

在终端,输入如下docker命令,进行一键部署:

shell 复制代码
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一键部署命令,如下图:

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

shell 复制代码
docker ps

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

shell 复制代码
http://192.168.50.228:1984

可以看到,成功的访问到页面啦!go2rtc就部署好了!

4 配置小米摄像头获取RTSP地址

首先,点击顶部导航栏的add 菜单,进入如下页面:

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

复制url,然后滚动到顶部,选择顶部导航栏的config菜单,在yaml配置区输入如下配置:

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的流地址应为:

shell 复制代码
# 无密码的构建方式
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的终端窗口,输入如下命令,查看磁盘占用及情况:

shell 复制代码
df -h

可以看到,外置存储大小一共239G ,挂载的根路径为vol1,所以我们需要将录像存储路径改为该位置,首先在该位置单独创建一个文件夹:

shell 复制代码
mkdir -p /vol1/EasyNVR
cd /vol1/EasyNVR

然后进行一键部署EasyNVR(注意替换存储路径):

shell 复制代码
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:

shell 复制代码
sudo curl https://get.cpolar.sh | sh

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

shell 复制代码
sudo systemctl status cpolar

8.3 注册及登录cpolar web ui管理界面

访问cpolar官网,点击免费注册按钮,进行账号注册

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

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

shell 复制代码
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 任意付费套餐,即可配置固定二级子域名,彻底告别域名频繁变化的烦恼。下面我们来看看如何操作。

首先,进入官网的预留页面:

shell 复制代码
https://dashboard.cpolar.com/reserved

然后,选择预留 菜单,即可看到保留二级子域名 项,填写其中的地区、名称、描述(可不填)项,然后点击保留按钮,操作步骤图如下:

列表中显示了一条已保留的二级子域名记录:

  • 地区 :显示为China Top
  • 二级域名 :显示为easynvr

注:二级域名是唯一的,每个账号都不相同,请以自己设置的二级域名保留的为主

接着,进入侧边菜单栏的隧道管理下的隧道列表,可以看到名为easynvr的隧道:

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

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

这里以https访问测试一下:

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

成功登录!以后你不管是去公司上班,还是外出旅游,都可以通过这个固定的公网地址,随时随地打开 EasyNVR,不仅能实时查看家里的情况,还能随意回放之前的录像。而且,这个地址是永久固定的,不用再担心过段时间就变了,是不是超级方便!

总结

完成部署以后,小米摄像头原有的硬件和网络连接不需要改变。Go2RTC负责解决视频流兼容问题,EasyNVR负责录像与回放,飞牛NAS则承担最终的文件存储。

相较多个中转容器组成的方案,双容器结构更适合N1盒子和低配NAS。组件更少,内存占用和故障排查难度也会下降,但实际运行效果仍取决于摄像头数量、分辨率、码率和存储设备性能。

Go2RTC配置中涉及小米账号信息、Token和RTSP认证密码,这些内容都属于敏感凭据。示例中的默认账号和密码应立即替换,配置文件不能上传到公开仓库,也不要在截图中展示完整Token。

EasyNVR开始持续录像后,应根据硬盘容量设置合理的保留周期。所谓本地存储并不等于无限保存,如果不设置循环清理策略,录像文件最终仍会占满磁盘,影响NAS上的其他服务。

通过 cpolar 映射EasyNVR页面后,可以在外部网络查看录像。随机地址适合临时测试,固定二级子域名更适合长期使用,但监控页面涉及家庭成员和住宅环境,不应公开传播。

Go2RTC负责把小米私有视频流转换成标准协议,EasyNVR负责集中录像和回放,cpolar负责补上远程访问入口。整套方案的核心价值,是用较低的硬件开销把摄像头录像留在自己的存储设备中,同时保留随时查看和长期维护的能力。

相关推荐
隔窗听雨眠1 小时前
GitHub Actions自动化运维实战:从零构建一体化CI/CD流水线
运维·自动化·github
MXsoft6181 小时前
国产智能运维平台如何选型?(国产智能运维平台哪家强?
运维
初圣魔门首席弟子2 小时前
TypeScript 类型系统完全指南:从基础到高级工具类型(知识库版)
linux·运维·ubuntu
CQU_JIAKE2 小时前
7.23[a]
linux·运维·服务器
weixin_457340213 小时前
ssh 本地链接服务器地址和服务器查看本地地址
运维·服务器·ssh
MXsoft6184 小时前
在大型混合云网络环境中,如何高效实现自动化运维?
运维·网络·自动化
海阔天空任鸟飞~10 小时前
Linux 权限 777
linux·运维·服务器
IT瑞先生12 小时前
docker-compose下快速部署实操——持续更新...
运维·docker·容器
无锡银洲自动化12 小时前
工业模拟量采集痛点分析:IDCB-4E/DR/Y测量前端解决方案
运维·产品运营