内网穿透的应用-把飞牛NAS变成家庭录像中心:EasyNVR部署与远程回放实战

前言

家里安装摄像头以后,实时查看通常不是什么问题。真正需要翻看几天前的录像时,才会发现内存卡容量有限,旧录像会被循环覆盖,长时间频繁写入也可能出现损坏。

想把录像保存得更久,很多摄像头厂商会提供云存储服务。单个设备的费用看起来不高,但家里有多个摄像头后,就需要分别订阅、分别管理,历史录像也会被分散在不同品牌的App中。

对于已经有飞牛NAS的家庭,可以把录像存储从摄像头和厂商云端转移到自己的硬盘中。EasyNVR能够接入RTSP、RTMP和ONVIF等标准协议,将不同品牌摄像头集中到同一个页面中管理。

本文会先通过SSH连接飞牛NAS,使用Docker部署EasyNVR,并把录像目录挂载到NAS存储空间。随后固定摄像头IP、测试RTSP地址,再完成设备添加、录像计划、实时预览和历史回放配置。

本地录像功能运行稳定后,还会使用 cpolar 将EasyNVR的10000端口映射到公网,并配置固定二级子域名。这样即使不在家里,也能通过浏览器查看实时画面和NAS中保存的历史录像。

1 什么是EasyNVR?

EasyNVR 是一款专业的软件型网络录像机(Network Video Recorder,NVR),用于集中管理和录像多路网络摄像头的视频流。它可以替代摄像头厂商提供的云存储服务,将录像统一存储在本地 NAS 或服务器上,实现完全的本地化管理。

EasyNVR 的核心功能包括:多摄像头接入 ,支持 RTSP、RTMP、ONVIF 等标准协议,并能够接入不同品牌和型号的摄像头,实现统一管理;本地录像存储 ,视频数据直接写入 NAS 或本地服务器,不依赖厂商云服务,从而避免长期订阅费用,同时支持长期录像和循环覆盖策略;实时监控与历史回放 ,通过 Web 界面集中管理所有摄像头,可以查看实时画面、快速定位历史录像,并支持多路同步播放和时间轴浏览;稳定运行,可在 NAS、迷你主机或家用服务器上 7x24 稳定运行,Docker 部署支持跨平台、快速安装和升级。

为了更直观理解,下面给出与摄像头官方 App 的对比:

对比项 官方 App EasyNVR
录像存储位置 云端 / 内存卡 本地 NAS / 服务器
是否依赖云服务
是否需要订阅 通常需要 不强制
多品牌摄像头管理 不支持 支持
数据控制权 厂商 用户自己

EasyNVR 允许用户完全掌控摄像头录像数据,同时实现多品牌摄像头的统一管理和长期本地存储,非常适合家庭或小型办公环境。

2 飞牛Nas中部署EasyNVR

本教程以Windows上虚拟机中部署的飞牛Nas 为例,其他的Nas系统(如:群晖Nas、极空间Nas 等)基本一致。首先,确保你的Nas系统开放了SSH远程,以飞牛Nas为例:

打开以后,在电脑上摁Win+R键,然后输入cmd回车,打开命令提示符终端 ,输入如下命令连接你的Nas系统终端:

shell 复制代码
ssh 飞牛用户名@你的Nas系统IP地址

连接上以后,接着使用如下命令切换root用户:

shell 复制代码
sudo -i

如下图,输入飞牛用户名的密码,即可切换至root用户(输入密码不会显示):

切换完成后,执行下面的 Docker 一键部署命令,即可快速部署 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 "$PWD/r:/app/r" -v "$PWD/stream:/app/stream" registry.cn-shanghai.aliyuncs.com/rustc/easynvr_amd64:latest

执行完成后,如果终端返回一串容器 ID,说明 EasyNVR 已经成功在后台运行

如果你希望 EasyNVR 录制的视频能够直接出现在飞牛相册中统一管理和查看 (可选但强烈推荐 ),可以在部署时,将 EasyNVR 的录像目录映射到飞牛相册的实际存储路径。像如下图一样:

以飞牛默认相册路径为例:

shell 复制代码
/vol1/1000/Photos

建议在相册目录下单独创建一个 EasyNVR 录像目录,避免和日常照片混在一起:

shell 复制代码
mkdir -p /vol1/1000/Photos/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/1000/Photos/EasyNVR:/app/r -v "$PWD/stream:/app/stream" registry.cn-shanghai.aliyuncs.com/rustc/easynvr_amd64:latest

这样一来,所有摄像头的录像文件都会被直接写入飞牛相册目录,既不用内存卡,也不依赖厂商云存储,实现真正的本地集中存储和统一管理。

接着使用如下docker命令,确认是否启动:

shell 复制代码
docker ps

可以看到,状态为UP,启动成功!让我们浏览器访问测试一下:

shell 复制代码
http://你的飞牛NAS系统IP地址:10000

成功访问到页面啦,输入用户名和密码admin,让我们登录看一下:

成功进入EasyNVR的首页啦,这里选择简体 语言,然后下一步:

继续下一步即可:

然后到最后一步骤,设置一个新的账号名称和密码 ,就初始化完成啦:

3 配置监控接入到EasyNVR

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

3.1 固定摄像头IP

由于一般的路由器默认都是通过 DHCP 动态分配 IP 地址 ,摄像头每次重启或网络波动后,IP 可能会发生变化。一旦 IP 变了,EasyNVR 就会连不上摄像头,导致监控画面丢失。所以在接入之前,建议先给摄像头固定一个静态 IP

设置方法有两种:

  • 摄像头端设置 (部分摄像机支持):登录摄像头的 Web 管理界面,在网络设置中将 IP 获取方式从"自动获取"改为"手动设置",填写一个局域网内未被占用的 IP(如 192.168.1.100)、子网掩码(255.255.255.0)和网关(路由器 IP)
  • 路由器端绑定:在路由器后台找到 DHCP 静态绑定(或 IP-MAC 绑定)功能,将摄像头的 MAC 地址与一个固定 IP 绑定

推荐使用第一种方式,更加稳定可靠。设置完成后,记录下这个固定 IP,后面添加设备时会用到。

我这里使用的监控设备为乔安 ,它不支持将自己设置为静态IP,所以需要登录到路由器后台,找到摄像机IP,做IP-MAC绑定,如:

这样就做好IP和Mac地址绑定啦,不同的路由器页面不同,可以搜索对应品牌设置方法。

3.2 获取流协议地址

可以看到我这台设备的IP地址为:

shell 复制代码
192.168.50.127

浏览器直接访问这个地址,登录到摄像机后台,可以看到RTSP的开关和认证:

RTSP的协议地址一般结构为(最好的办法是可以直接询问客服,如果支持流协议,客服会给您提供):

shell 复制代码
# rtsp://用户名:密码@摄像机IP地址/live/ch00_0
rtsp://admin:admin123@192.168.50.127/live/ch00_0

我们可以拿相关支持播放流的程序进行测试,比如PotPlayer 进行播放:

可以看到,能够成功的获取到监控中的画面了!代表这个流协议地址正确!

3.3 将流协议地址接入到EasyNVR

在前面,我们已经成功的给摄像头配置了静态IP ,这样我们的RTSP流协议地址 就不会发生变化了。接着,我们将这个RTSP流协议地址接入到EasyNVR中。

首先打开EasyNVR的首页,然后选择设备列表 菜单,点击添加 按钮:

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

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

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

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

如下图所示:

可以看到,该直播预览页面集成了多协议实时播放、线路切换、云台控制与参数可视化 等能力,用户可根据实际场景在 WebRTC、HTTP-FLV、RTMP、RTSP 等协议间自由切换以兼顾延迟与兼容性 ;在视频播放的同时,页面还实时展示分辨率、编码格式、传输方式、码率等关键流媒体信息 ,便于调试与排障;若视频流协议源本身支持云台控制,还可直接在页面中完成方向控制、变倍与速度调节,实现从预览到运维的一体化操作。

3.4 查看录像回放

前面设置好了录像计划,设置为每天 ,设置好后就会即刻开始录像 。我们回到首页,选择菜单的录像回放

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

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

如果你按照前面的飞牛相册路径映射,你还可以直接在飞牛相册中查看回放:

好啦,基本设置就完成啦,EasyNVR还拥有更多功能值得你去探索!

4 穿透EasyNVR实现公网访问

到这里,EasyNVR 已经在飞牛 NAS 上跑起来了,录像也都存在本地硬盘上,彻底告别了云存储月租费 。但问题来了:虽然各家摄像头 APP 也能看实时画面,但想回看历史录像就要交钱,而且家里几个不同品牌的摄像头还得装好几个 APP,管理起来很麻烦。

有了 cpolar 内网穿透 ,这些问题就迎刃而解了。只需简单配置,就能让 EasyNVR 通过公网地址随时随地访问 ------不仅能看实时画面,更重要的是免费回放本地存储的所有录像 。而且一个链接就能分享给家人,不用每个人都装 APP、注册账号,浏览器打开就能看

4.1 什么是cpolar?

  • cpolar 是一款内网穿透工具,可以将你在局域网内运行的服务(如本地 Web 服务器、SSH、远程桌面等)通过一条安全加密的中间隧道映射至公网,让外部设备无需配置路由器即可访问。
  • 广泛支持 Windows、macOS、Linux、树莓派、群晖 NAS 等平台,并提供一键安装脚本方便部署。

4.2 安装cpolar

在前面连接的飞牛终端中输入如下命令,一键安装cpolar:

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

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

shell 复制代码
sudo systemctl status cpolar

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

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

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

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

shell 复制代码
http://192.168.184.137:9200/

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

4.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 小时 左右自动更换一次域名地址。对于长期访问的不太友好,但是该方案是免费 的,如果您有一定的预算,可以查看大纲5固定域名方式 ,且访问更稳定哦。

5 固定二级子域名

随机域名虽然免费,但每 24 小时左右会自动更换一次 ,每次变化都要重新记地址、重新分享链接,用起来确实不太方便。如果你希望拥有一个固定不变、简短易记的专属域名 ,只需升级 cpolar 任意付费套餐,即可配置固定二级子域名,彻底告别域名频繁变化的烦恼。下面我们来看看如何操作。

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

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

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

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

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

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

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

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

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

这里以https访问测试一下:

访问成功!

总结

完成部署以后,摄像头只负责提供视频流,EasyNVR负责统一接入、录制和回放,飞牛NAS则负责保存录像文件。不同品牌的摄像头可以集中到一个页面中,不必反复切换多个App。

本地存储可以减少对云录像订阅的依赖,但录像能够保存多久,仍然取决于摄像头数量、码率、分辨率和硬盘容量。正式长期运行前,建议先估算每天产生的数据量,再设置合理的保留周期和循环覆盖策略。

摄像头IP应保持固定,RTSP或ONVIF账号也要单独设置强密码。如果地址、端口或认证信息发生变化,EasyNVR就可能无法继续拉流和录像,因此需要定期检查设备在线状态。

通过 cpolar 映射10000端口后,可以从外部网络查看EasyNVR。随机地址适合临时测试,固定二级子域名更适合长期使用,但监控页面涉及家庭活动、老人孩子和住宅环境,不能直接公开分享。

初始化完成后应立即修改默认账号密码,并限制家人的访问权限。摄像头密码、RTSP地址和公网入口都不应出现在公开截图或文章中,不需要远程查看时,也可以关闭对应隧道。

EasyNVR负责集中录像和回放,飞牛NAS负责长期存储,cpolar负责补上远程访问能力。整套方案的价值不仅是减少云存储费用,更重要的是让录像保留周期、存储位置和访问权限都由家庭自己决定。

相关推荐
峥嵘life1 小时前
Android WiFi连接过程 wpa_supplicant 日志分析
android·开发语言·php
BerryS3N1 小时前
深度解析:从零构建生产级大模型 RAG(检索增强生成)系统全栈指南
开发语言·python·ai
weixin_BYSJ19871 小时前
「课设设计」springboot校园超市助购系统26449 (附源码)
java·javascript·spring boot·python·django·flask·php
今儿敲了吗1 小时前
Python——函数基础
开发语言·笔记·python
CHANG_THE_WORLD1 小时前
深入理解递归:从函数调用到调用栈的完整执行过程
java·开发语言·算法
xuefeiniao2 小时前
CentOS + 宝塔服务器偶发 SSH、面板、网站全部无法访问排查记录(PHP-FPM 内存耗尽案例)
服务器·centos·ssh·php
kels88992 小时前
单连接动态增减订阅:股票行情API后端降负载实战方案
开发语言·笔记·python·信息可视化·金融
a4493153622 小时前
MacBook USB-C不充电故障诊断:从PD握手到主板供电链路
c语言·开发语言·macos·电脑
德福危险2 小时前
从目录枚举到bash破壳漏洞、从流量抓包到组权限提权:靶机练习之symfonos3
开发语言·bash