NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

2023-12-30 10:58:07 12点赞 82收藏 16评论

本文纯属自娱自乐,如果你认为使用品牌监控一步到位就可以了,那就不用继续往下看了。

本文仅用于记录自己折腾家用监控系统的过程,也推荐给和我一样爱折腾docker/linux服务器的站内值友。

以下正文


需求动机和方案

家用监控越来越普及,包括室内/入户/庭院等场景。我的需求是在入户门厅布控,当有人来时进行抓拍或者录像,平时不用录像。一般的家用监控摄像头或者智能门铃设备可以完全满足我的需求,但是爱折腾的我怎么会满足于买一个品牌摄像头+云存储(还要收费)的简单方案。

当然要利用已有的设备--Linux小主机,最好可以用Docker部署视频监控软件,再外接硬盘(已有),IP摄像头通过局域网接入监控软件,在后端(监控软件)进行目标检测,然后在检测到目标或者运动后触发录像->保存到硬盘。后端小主机+监控软件+硬盘有点类似一套NVR (network video recorder)。

视频监控软件可以用NAS上自带的产品,比如威联通的QVR Pro,但是考虑到不给NAS增加额外负载所以放弃。

经过非常不完全调查🔎,可以用Docker部署的视频监控软件知名的有以下几款:

  • Frigate - NVR With Realtime Object Detection for IP Cameras, 12.4k stars

  • Shinobi - the Open Source CCTV Solution written in Node.JS. Designed with multiple account system, Streams by WebSocket, and Direct saving to MP4. Shinobi can record IP Cameras and Local Cameras. 1.3k + 600 stars

  • moonfire-nvr - a security camera network video recorder, 1k stars

  • OS-NVR is a lightweight extensible CCTV system, 100+ stars

实际尝试了Frigate和Shinobi,前者由于CPU占用过高放弃(可能是没配置好)。相比Frigate,Shinobi的web页面看起来更加专业,资源占用也少的多。后两款没有尝试,不做评论。

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

最终方案为:IP摄像头(废旧pad或者手机)+Linux小主机(部署Shinobi)+外接硬盘+(阿里云同步),括号内可选,可实现检测到目标或者运动触发录制,(准实时在云端查看监控录像)。

最终硬件: 废弃多年的小米平板(安装IP摄像头APP)+Linux小主机+USB外接硬盘(绿联硬盘盒+海康OEM),这些设备都是复用的,并不是为了监控专门购置。

硬件环境硬件环境

题外:如果对上面这个服务器监控小屏幕感兴趣可以移步🔽

Shinobi介绍

Shinobi是一款开源视频管理软件,它可以接入网络摄像头/USB摄像头,具有实时录制/回放、运动检测、目标检测等完整功能,免费版完全够用。详细功能请前往官方特性页查看。

Shinobi on githubShinobi on github

原项目1.3k stars说明确实是一个非常成功的开源项目。目前项目在gitlab上还在不断更新。🔽

Shinobi on gitlabShinobi on gitlab

Shinobi支持通过Docker部署,大大减少了对环境的依赖程度和部署难度。在Linux小主机上部署Shinobi并接入网络摄像机,小主机再外挂一块硬盘,可以简单搭建一套家用网络录像系统(NVR)。

准备工作

在宿主机上新建shinobi对应的几个目录(以下路径根据实际情况调整):

1. 新建文件夹 shinobi 和 子目录

mkdir -p /mnt/hdd_hikvision/shinobi

mkdir -p /mnt/hdd_hikvision/shinobi/{config,customAutoLoad,database,plugins,videos}

说明:

config目录保存配置文件

database保存数据库shinobi自带mysql数据库,该目录将容器内部的数据库文件映射到宿主机目录

videos目录存放记录的视频片段

上面的目录在初次容器启动前保持为空即可。

2. 新建临时文件存储文件系统

mkdir -p /dev/shm/Shinobi/streams

说明:

/dev/shm 是linux下一个利用内存虚拟出来的一个目录,这个目录中的文件都是保存在内存中,而不是磁盘上。/dev/shm/Shinobi/streams用户存放一些临时的视频片段,当持久化到videos目录后,streams中的数据会被删除。

streams目录streams目录

3.镜像

拉取镜像registry.gitlab.com/shinobi-systems/shinobi:dev。这个镜像比较大,1.55G。也可以在部署时拉取。🔽

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

Docker部署

按照官方说明 Install Shinobi with Docker 来实现部署。

sudo docker run -d --name='Shinobi'
-p '28080:8080/tcp'
-v "/dev/shm/Shinobi/streams":'/dev/shm/streams':'rw'
-v "/mnt/hdd_hikvision/shinobi/config":'/config':'rw'
-v "/mnt/hdd_hikvision/shinobi/customAutoLoad":'/home/Shinobi/libs/customAutoLoad':'rw'
-v "/mnt/hdd_hikvision/shinobi/database":'/var/lib/mysql':'rw'
-v "/mnt/hdd_hikvision/shinobi/videos":'/home/Shinobi/videos':'rw'
-v "/mnt/hdd_hikvision/shinobi/plugins":'/home/Shinobi/plugins':'rw'
-v '/etc/localtime':'/etc/localtime':'ro'
registry.gitlab.com/shinobi-systems/shinobi:dev

部署完成,可以从浏览器进入管理页面

Web地址(管理端):http://HOST-IP:PORT/super

默认超级用户 : admin@shinobi.video; 密码:admin

Web地址(客户端):http://HOST-IP:PORT,用户和密码通过管理端设置。

PORT为容器映射到宿主机的端口,上面脚本中 -p '28080:8080/tcp' 说明宿主机的端口为28080,可以自行修改。

Shinobi使用

Shinobi的功能比较完整,界面也比较丰富。但是,要很好的使用这个系统还是需要一些学习成本,个人感觉整个系统的设计对监控新手并不算友好。下面从纯新手的角度介绍下使用方法。

1. 新建用户

通过默认超级用户{admin@shinobi.video}登录管理端(http://HOST-IP:PORT/super),然后新建用户用以日常管理。

填写用户名,可以是email,也可以其他。[Group Key] 为用户组,与视频存放的目录结构有关,个人使用可以不关心。其他属性先按照默认。🔽

新建日常管理用户新建日常管理用户

🔼上述用户新建完成后,可以登录http://HOST-IP:PORT。

2. 增加摄像头

用上述新建的用户登录,找到左边[Monitor Settings],然后在页面中填写摄像头信息,最后记得在右下角点击[SAVE]保存。

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

这里以网络摄像头(IP Camera)为例,有几个关键信息需要解释下:

Identity区域的[Mode]选项:Watch-Only,可以查看摄像头,默认不录视频,可以配置事件触发录像;Record,全程记录模式,默认每隔15分钟保存一次录像。🔽

ModeMode

视频压缩不建议开启,特别是在record模式下。如果视频录制速度快于压缩速度,那么可能产生问题。而且,如果CPU性能一般,视频压缩会长时间让CPU负载在较高值,还需要探索下是否有硬件加速功能。🔽

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

Connecttion区域,在[Full URL Path]中填写rtsp码流的地址,这个可以从摄像头中查看,一般格式类似 rtsp://{username}:{password}@CAMERA_IP:PORT/****。填写完成后,可以下方绿色的【Probe】进行测试,是否能正确获取到码流信息。🔽

rtsprtsp

对填写的rtsp地址进行检验🔽

ProbeProbe

如果不清楚rtsp的完整地址,也可以使用ONVIF扫描器(ONVIF Scanner)。在扫描器页面上填写IP(支持IP段)、Port、Username(如有)、Password(如有),然后【search】。如果信息填写正确,右边【Found Devices】中会出现摄像头信息。复制其中的rtsp协议完整地址,或者直接【Add All】可以将信息自动填写到新增摄像头页面。🔽

ONVIF ScannerONVIF Scanner

Input区域,官网建议在网络状况良好的环境中,分别将Duration和Probe Size修改为0和32。不修改也可以。🔽

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

3. 设置运动检测

前面[Monitor Settings]--[Identity]--[Mode]设置为“Watch-Only”,然后[Monitor Settings]--[Detector Settings]开启检测,可以在检测到运动或者目标时触发录像。具体设置如下:

Detector SettingsDetector Settings

🔼上图中[How to Record]选择“Event-Based Recording(For Watch-Only Mode)”,[Trigger Record]选择“Yes”。

运动检测 (Motion Detection):这里直接使用Build-in检测器(猜测就是简单的帧差或者背景建模),当画面中有运动目标可以触发录像,一般够用了。🔽

Motion DetectionMotion Detection

目标检测 (Object Detection):需要安装插件(TensorFlow目标检测),而且最好搭配GPU,由于硬件问题没有开启。

4. 设置通知(非必要)

设置事件通知,当检测到运动或者目标时,Shinobi可以通过邮件等方式发送通知。

先到[Account Settings]-[Email]中设置邮件服务器信息/发送的邮箱/接收的邮箱。邮件服务器和发送的邮箱以新浪邮箱为例:

  • Host: smtp.sina.com

  • Port: 25

  • Email: 发送的邮箱

  • Password: 上面Email的密码或者授权码

  • Send to: 接收的邮箱

设置邮箱设置邮箱

然后到[Monitor Settings]--[Notifications]开启通知,将Email设置为Yes.🔽

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

备注: 以新浪邮箱为例,Password需要输入的是邮箱的授权码,因为Shinobi发送邮件是使用内置的nodemailer,对新浪来说是第三方客户端。🔽

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

当检测到运动以后,除了记录视频,也会收到邮件通知。🔽

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

监控效果

Web端[Live Grid]可以查看实时画面(有10s左右延迟)。

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

检测到运动时整个摄像头框会变红色🔽

检测到运动检测到运动

查看录像[Videos],因为我设置的是Watch-Only模式+运动检测事件触发,所以这些录像是运动检测触发录制下来的,说明上面设置的运动检测生效了。🔽

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

这些监控录像也可以在宿主机本地找到,因为docker启动脚本中将容器内部的录像目录映射到了宿主机目录:

-v "/mnt/hdd_hikvision/shinobi/videos":'/home/Shinobi/videos'

videos目录下按照Group key/Monitor ID/的组织形式按照摄像头对录像进行存放。

在宿主机目录查看录像文件在宿主机目录查看录像文件

云端准实时查看录像(非必须)

在外想要看到家里的实时监控画面,可以通过一些内网穿透的办法。但是我在用的zerotier带宽不够无法实现视频回看。

这里介绍一种准实时查看监控视频的思路,需要用到阿里云盘(或者其他网盘),clouddrive2网盘工具,rsync文件夹同步工具。

原理是通过clouddrive2将网盘文件夹W挂载到本地文件夹H,然后使用rsync工具定时将视频录像文件同步到本地文件夹H,实现录像准实时存储到云端。

shinobi录像文件夹--(rsync)-->本地文件夹H--(clouddrive2)-->网盘文件夹W

Docker部署clouddrive2

sudo docker run -d --name clouddrive2 --env CLOUDDRIVE_HOME=/Config -v /mnt/hdd_hikvision/work/clouddrive2/data:/data_container:shared -v /mnt/hdd_hikvision/work/clouddrive2/Config:/Config -v /mnt/hdd_hikvision/work/clouddrive2/media:/media:shared -p:19798:19798 --privileged --device /dev/fuse:/dev/fuse cloudnas/clouddrive2:latest

然后进入clouddrive2页面: http://IP:19798,注册🔽

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

注册完成,这里选择阿里云盘,然后扫码绑定阿里云盘账号🔽

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

将阿里云的文件夹shinobi挂载到clouddrive2中的文件夹data_container (这个是容器内部路径,详见上面脚本)🔽

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

完成上面操作后,本地文件夹data/shinobi(映射容器内部/data_container)与阿里云的文件夹shinobi进行了挂载。

文件夹同步

可以使用以下脚本将录像目录与clouddrive2目录建立同步:

sudo rsync -rt --delete /mnt/hdd_hikvision/shinobi/videos/12345/* /mnt/hdd_hikvision/work/clouddrive2/data/shinobi/

将上述脚本放到crontab定时任务工具中:

crontab -e 编辑定时任务,每5分钟同步一次(可以算准实时了)

crontabcrontab

同步到阿里云的录像🔽

云端云端

系统运行情况

小主机的配置不高,NVR类软件需要长期运行,所以要求内存/CPU占用在合理的范围内。

通过netdata查看Shinobi容器,可以看到使用CPU和内存资源比较少。🔽

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

运行一整天后大概占用了500MB内存,可以接受。CPU占用可以忽略不计。🔽

NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像

总结

整个监控方案使用了一段时间,在门厅场景中能准确记录到访的情况,因为是事件触发所以存储下来的录像不会占用太大空间。

Shinobi作为整个系统的核心运行稳定,占用资源较少,体验下来是一款比较成熟的视频监控管理软件,用来作为家用NVR是合适的。如果想在外查看家中监控,文中也给出了一种免费的准实时的方法,仅供参考。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

MERCURY 水星网络 MIPC5286W-4 监控摄像头 500万像素

MERCURY 水星网络 MIPC5286W-4 监控摄像头 500万像素

149元起

TP-LINK 普联 IPC669 全彩超清摄像头 600万

TP-LINK 普联 IPC669 全彩超清摄像头 600万

269元起

TP-LINK 普联 IPC652-A4 3K全彩摄像头 500万

TP-LINK 普联 IPC652-A4 3K全彩摄像头 500万

249元起

TP-LINK 普联 双摄高清监控摄像头 双镜600万标准版

TP-LINK 普联 双摄高清监控摄像头 双镜600万标准版

264元起

TP-LINK 普联 双摄800万枪球联动全彩超清摄像头家用监控器360无tplinkIPC6Y89-A4

TP-LINK 普联 双摄800万枪球联动全彩超清摄像头家用监控器360无tplinkIPC6Y89-A4

299元起

TP-LINK 普联 TL-IPC44AN-4 全景监控摄像头

TP-LINK 普联 TL-IPC44AN-4 全景监控摄像头

119元起

TP-LINK 普联 H.265高清监控网络远程硬盘录像NVR APP TL-NVR6108CA-L 8

TP-LINK 普联 H.265高清监控网络远程硬盘录像NVR APP TL-NVR6108CA-L 8

169元起

TP-LINK 普联 tplink 4/8/16路POE高清网络硬盘录像机NVR监控摄像头主机录像机

TP-LINK 普联 tplink 4/8/16路POE高清网络硬盘录像机NVR监控摄像头主机录像机

109.48元起

TP-LINK 普联 H.265 网络硬盘录像机 TL-NVR6104A-D4S

TP-LINK 普联 H.265 网络硬盘录像机 TL-NVR6104A-D4S

80.5元起

TP-LINK 普联 TL-IPC632P-A4 监控摄像头 焦距4mm

TP-LINK 普联 TL-IPC632P-A4 监控摄像头 焦距4mm

182.8元起

TP-LINK 家用POE监控摄像头 360度全景室外防水高清监控器 仓库手机远程网络红外全彩球机 TL-IPC642P-A【400万超清日夜全彩】 标配(不含内存卡)

TP-LINK 家用POE监控摄像头 360度全景室外防水高清监控器 仓库手机远程网络红外全彩球机 TL-IPC642P-A【400万超清日夜全彩】 标配(不含内存卡)

269元起

TP-LINK 普联 AIPC657 双目变焦版 5MP智能摄像头

TP-LINK 普联 AIPC657 双目变焦版 5MP智能摄像头

499元起

MERCURY 水星网络 安防监控 优惠商品

MERCURY 水星网络 安防监控 优惠商品

139元起

监控摄像头

监控摄像头

209元起

TP-LINK 普联 IPC55A 全景鱼眼无线监控摄像头 500万像素 WiFi款

TP-LINK 普联 IPC55A 全景鱼眼无线监控摄像头 500万像素 WiFi款

239元起

TP-LINK 普联 双摄600万枪球联动全彩超清摄像头家用监控器360无线家庭室外户外tplink网络远程高清IPC669-A

TP-LINK 普联 双摄600万枪球联动全彩超清摄像头家用监控器360无线家庭室外户外tplink网络远程高清IPC669-A

299元起

文中相关商品

MERCURY 水星网络 水星(MERCURY)500万监控室内摄像头无线智能云台wifi
TP-LINK 普联 H.265高清监控网络远程硬盘录像NVR APP TL-NVR6108CA-L 8
16评论

  • 精彩
  • 最新
  • 我觉得你目前的需求闲鱼买个二手海康最有性价比。

    校验提示文案

    提交
    我前面也说了,买个品牌最省事,那也没啥意思了

    校验提示文案

    提交
    我是买的海康录像机,然后拉RTSP进我自己写的APP里,没用那庞大的SDK [得意]

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 有汉化吗?这个有个数限制吗

    校验提示文案

    提交
    有的,直接在页面上可以修改语言。同时接过2个

    校验提示文案

    提交
    好的。有空试试 感谢

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 这个有摄像头数量限制么?

    校验提示文案

    提交
    在官方文档里找了一遍没找到。只找到一个说明,在某平台上接入43个视频流在不开录制的情况下占用43%cpu

    校验提示文案

    提交
    收起所有回复
  • 很好,有一款也不错,叫agentdvr

    校验提示文案

    提交
    光用关键词nvr了,没想到还有dvr

    校验提示文案

    提交
    收起所有回复
  • 超级用户登录后提示没有安装数据库
    Database is not running or unreachable
    Please ensure it is started then restart Shinobi.

    By default Shinobi uses MariaDB, an SQL server, as the database engine.

    If you need to install the database files again you may follow this article.

    校验提示文案

    提交
    这个问题我这里倒是没有发现

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
82
扫一下,分享更方便,购买更轻松