家用摄像头本地存储和查看
硬件: 支持ONVIF的家用摄像头, Tplink好像全系支持, 我用的型号是44gw
技术方案: Shinobi + alist + zertier/cloudflared
最开始是在张大妈上看到有人用nas 实现摄像头的本地存储和查看, 因为威联通和群晖都有对应的套件支持, 可以流程式配置. 但是Linux版本没有对应的套件, 所以就只能自己搜索相关方案, 在接近眼瞎后终于搞好了.
第一个搜到的是ZoneMinder, 但是都说它性能不好, 继而诞生了Shinobi, 所以我的方案就一步到位, 直接使用Shinobi进行配置.
目前实现的功能有
- 摄像头支持运动检测 (Shinobi)
- 检测到运动后进行视频保存 (Shinobi)
- 循环保存视频(3天内) (Shinobi)
- 可以通过alist进行视频网页查看 (alist)
- 如果本地没外网ip, 也可以进行外网访问查看视频 (cloudflared)
1. Shinobi配置
官网地址: https://docs.shinobi.video/
该说不说, Shinobi的网页看的眼睛是真累, 黑底白字, 还都是小小的英文, 眼睛都要瞎了.
1. 安装Shinobi

这里官网推荐使用本地安装, 这样便于安装许多插件以及和主机交互. 但是由于我需求没那么多, 所以就使用docker安装了.
- 安装命令
bash <(curl -s https://gitlab.com/Shinobi-Systems/Shinobi-Installer/raw/master/shinobi-docker.sh)运行该命令后会自动生成一个docker-compose 的启动文件, 里面有挂载地址和启动端口等, 如下

- 访问页面
在浏览器里面输入ip+8080 即可访问配置页面. 首次登录的时候(此时我们网址后面要加一个/super 后缀)需要使用超级管理员登录, 然后重建一个新用户. 创建成功后退出超级管理员页面, 然后使用新账户登录普通后台配置页(ip+8080 ). 关于本流程官网描述如下

2. 添加摄像头和监视器
如果你的摄像头支持ONVIF 协议, 那么就很容易添加.
- 添加摄像头
在上一步骤使用新建账户登录页面后, 在侧边栏找到ONVIF Scanner 选项, 点击后进入设备搜索添加页面. 在页面的Scan Setting 区域设置你摄像头的ip地址, 端口号, 用户名和登录密码, 以Tplink 为例, ip地址和端口信息可以在APP的设备页, 通过右上角更多设置 -> 我的摄像机找到, 用户名和密码是APP上设置的账号密码. 当这些信息输入后即可点击下面的Search 按钮进行搜索.

如果上面设置无问题, 同时你的设备也没问题, 右侧便会检测到摄像头, 如下所示

如果按照上面操作没有找到相应摄像头, 那么可以用官网Adding a Camera Manually 章节的其他方法进行添加. 这里我没实际操作过, 就不进行扩展了.
- 添加监视器
在上一步骤成功添加摄像头后, 工具自动给我们添加一个监视器Monitor, 我们需要对这个监视器进行一些基本的操作.
- 在左侧栏找到
Monitor Setting选项, 点击后在右侧页面选择我们刚才自动创建的监视器, 然后进行配置(如果不在右侧选择, 默认是新增加监视器). 确保其Mode为Watch-only模式, 在该模式下才能进行后续运动监测录制, 其他如Record模式是24小时录制.

- 在页面右下角将当前设置改为高级设置, 如下所示.

- 在修改完毕后, 我们选择左侧的
Stream选项, 将右侧的Stream Type暂时更改为MJPEG模式, 这种模式便于我们通过实时h外面行运动检测的测试. (默认的HLS不能在我们页面上实时显示摄像头画面, 但是其利于长时间运行的运动监测, 所以后续我们需要再调整过来.)

- 继续选择
Detector Settings选项, 将右侧的Enabled更改为Yes, 如下所示.

这里我们可以再去设置下监测区域, 这里直接鼠标拖动右侧红色区域的点即可

- 随后点击右下角的保存按钮即可, 此时我们可以在
Live Grid选项里面看到摄像头的事实画面. - 测试是否成功设置. 此时需要一个运动的物体进入摄像头区域, 然后再消失. 完成上面步骤后, 进入右侧菜单的
Videos页面, 刷新查看是否成功记录下来. 如果和下图一样有视频存在, 那就表示设置成功. 此时我们需要再返回步骤三, 将右侧的Stream Type暂时更改为HLS模式.

- 保存后即配置完成.
2. Alist设置
这一步来说是比较简单的, 只需要运行对应容器即可, 需要注意的是这里宿主机挂载的地址在容器内/opt/alist/data 目录下, 即如果我们把宿主机的/root 挂在到容器上, 我们在挂载本地资源的时候根路径/opt/alist/data 就相当于宿主机的/root 目录.
启动命令可参考
docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest启动成功后, 即可将自己本地的监控录像地址挂载上去. 如下所示

3. Zerotier/Cloudflared设置
这里可以参考我之前的文章(点击即可进入)
Zerotier用于内网访问, Cloudflared用户外网访问. 设置好后即可访问.

4. 最后
Shinobi支持的功能还有很多, 包括物体检测, 消息通知等, 以及还有许多插件, 但是目前我还用不到这些, 而且它的网页看着也就费眼, 这些就后面有兴趣了再去探索下.
