NVR in docker: 探索使用Shinobi搭建家用场景视频监控录像系统,支持云端准实时查看录像
2024-08-26 06:05 作者:佚名
本文纯属自娱自乐,如果你认为使用品牌监控一步到位就可以了,那就不用继续往下看了。
本文仅用于记录自己折腾家用监控系统的过程,也推荐给和我一样爱折腾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页面看起来更加专业,资源占用也少的多。后两款没有尝试,不做评论。
最终方案为:IP摄像头(废旧pad或者手机)+Linux小主机(部署Shinobi)+外接硬盘+(阿里云同步),括号内可选,可实现检测到目标或者运动触发录制,(准实时在云端查看监控录像)。
最终硬件: 废弃多年的小米平板(安装IP摄像头APP)+Linux小主机+USB外接硬盘(绿联硬盘盒+海康OEM),这些设备都是复用的,并不是为了监控专门购置。
硬件环境题外:如果对上面这个服务器监控小屏幕感兴趣可以移步
Shinobi是一款开源视频管理软件,它可以接入网络摄像头/USB摄像头,具有实时录制/回放、运动检测、目标检测等完整功能,免费版完全够用。详细功能请前往官方特性页查看。
Shinobi on github原项目1.3k stars说明确实是一个非常成功的开源项目。目前项目在gitlab上还在不断更新。
Shinobi on gitlabShinobi支持通过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目录3.镜像
拉取镜像registry.gitlab.com/shinobi-systems/shinobi:dev。这个镜像比较大,1.55G。也可以在部署时拉取。
按照官方说明 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的功能比较完整,界面也比较丰富。但是,要很好的使用这个系统还是需要一些学习成本,个人感觉整个系统的设计对监控新手并不算友好。下面从纯新手的角度介绍下使用方法。
通过默认超级用户{admin@shinobi.video}登录管理端(http://HOST-IP:PORT/super),然后新建用户用以日常管理。
填写用户名,可以是email,也可以其他。[Group Key] 为用户组,与视频存放的目录结构有关,个人使用可以不关心。其他属性先按照默认。
新建日常管理用户上述用户新建完成后,可以登录http://HOST-IP:PORT。
用上述新建的用户登录,找到左边[Monitor Settings],然后在页面中填写摄像头信息,最后记得在右下角点击[SAVE]保存。
这里以网络摄像头(IP Camera)为例,有几个关键信息需要解释下:
Identity区域的[Mode]选项:Watch-Only,可以查看摄像头,默认不录视频,可以配置事件触发录像;Record,全程记录模式,默认每隔15分钟保存一次录像。
Mode视频压缩不建议开启,特别是在record模式下。如果视频录制速度快于压缩速度,那么可能产生问题。而且,如果CPU性能一般,视频压缩会长时间让CPU负载在较高值,还需要探索下是否有硬件加速功能。
Connecttion区域,在[Full URL Path]中填写rtsp码流的地址,这个可以从摄像头中查看,一般格式类似 rtsp://{username}:{password}@CAMERA_IP:PORT,''); dataLayer.push({'event':'1200025','operation':''+gztext+''});" class="z-group-data J_zhi_like_fav J_zhi_like_fav_detail" title="收藏" data-channel="11" data-article="95948361" data-type="fav" data-aid="a0xrewk0" data-cid="11" data-atp="76" data-tagid="无" data-position="无" data-isdetail="1" data-cate="无"> 96 19