Web版视频监控软件ZoneMinder

什么是 ZoneMinder ?

ZoneMinder 是为 Linux 开发的免费、开放源代码的视频监控系统,支持 IP 、USB 和模拟摄像机。可以使用 web 界面监控重要场所。当异常事件发生时,你就可以收到 e-mail 或短信通知。

什么是 RTSP 协议 ?

RTSP(Real Time Streaming Protocol),实时流传输协议,是 TCP/IP 协议体系中的一个应用层协议,RTSP 在体系结构上位于 RTP 和 RTCP 之上,它使用 TCP 或 UDP 完成数据传输。该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。

之前,老苏一直用 iSpy 来当监控主机, 不过 iSpy 只能运行在 Windows 平台,这样不得不多开一台主机,在全世界都在提倡节能减排的时候,我们也应该有所行动。

这次我们要安装的 ZoneMinder 是基于 Web 的,完全可以安装在群晖中,这样就可以节省出一台主机的电量了。

关于 iSpy 可以看看老苏之前写的 『 用旧电脑做监控主机

安装

数据库

通过 phpMyAdminMariaDB 5 中新建用户 zm,创建同名的库 zm 并授予所有权限。

安装镜像

在群晖上以 Docker 方式安装。

在注册表中搜索 zoneminder ,选择第一个 quantumobject/docker-zoneminder,版本选择 latest

docker 文件夹中,创建一个新文件夹,并将其命名为 zoneminder,再建一个子目录 config

文件夹 装载路径 说明
docker/zoneminder/config /config 存放设置
docker/zoneminder/zm /var/cache/zoneminder 存放截图、事件等

2个目录

端口

Web 用了端口 3380 ,Event Server 从 9000 改为了 9030

本地端口 容器端口
3380 80
9030 9000
6802 6802

环境

可变
ZM_DB_HOST 数据库地址,默认值为 db
ZM_DB_NAME 库名,默认值为 zm
ZM_DB_USER 数据库用户名,默认值为 zmuser
ZM_DB_PASS 数据库密码,默认值为 zmpass
ZM_DB_PORT 数据库端口,默认值为 3306
TZ 时区,默认值为 America/New_York
  • ZM_DB_HOST :设为主机的 IP,老苏的群晖主机内网地址是 192.168.0.199,你要根据自己的 IP 修改
  • ZM_DB_NAME :直接用默认值 zm
  • ZM_DB_USER :用户名为 zm
  • ZM_DB_PASS :数据库密码要按自己的填写
  • ZM_DB_PORT :如果你同时安装了 MariaDB 5MariaDB 10,一般前者是 3306,后者是 3307
  • TZ 要改为 Asia/Shanghai

运行

在浏览器中输入 http://群晖IP:3380/zm,就能看到隐私条款

拉到最下面,左侧选择 Accept,右侧点 APPLY

接下来就在主界面了

设置中文

菜单 Options –> System –> LANG_DEFAULT,从 en_gb 改为 cn_zh

菜单有些已经是中文了,看得出来汉化不完全

添加摄像头

控制台 –> 新建监视器

在弹出页面先设置 信号源

老苏有一个巨峰摄像头,之前玩 HomeAssistant 的时候已经研究过 RTSP 的地址,其中:

  • ip:为设备IP;
  • port:端口号默认为554,若为默认可不填写;
  • channel:通道;
  • stream:码流类型  0=主码流 1=子码流;
1
2
# RTSP 地址
rtsp://ip:port/user=用户名&password=密码&channel=1&stream=0.sdp?real_stream

小技巧:要确认 RTSP 地址是否有效,可以将地址在 VLC、PotPlayer、IINA 等播放器中打开,如果能正确显示图像,就说明地址是 OK 的。

  • 信号源路径:rtsp://192.168.0.81:554/user=admin&password=&channel=1&stream=0.sdp?real_stream
  • 远程方法:用了默认的 TCP
  • 捕获分辨率:按实际的填写就可以

保存后,再设置 一般

  • 名称:随意,让自己容易识别就好了。不过只能使用数字、字母、破折号和下划线,中文就别想了。老苏起了个 jufeng_rtsp,这个名字后面集成到 HomeAssistant 会用到;
  • Server:选 Auto 就可以;
  • 信号源类型:选了 FFmpeg
  • 功能:选了 监视

保存之后,如果没问题就是绿色的

如果存在错误,是红色的

直接点 名称,可以看图像预览,而点后面的 信号源 中的 IP,会进入编辑状态

和老苏之前介绍的 iSpy 一样,摄像头还有非常多的设置,比如存储、时间戳等一大堆的配置选项,这个就看你的需求了。

接入 HomeAssistant

关于 HomeAssistant 可以看看老苏之前写的 『 群晖上用docker安装homeassistant

Camera

编辑 configuration.yaml ,加入下面这段代码

1
2
3
4
5
6
7
8
9
10
11
zoneminder:
- host: 192.168.0.199:3380
path: /zm/
path_zms: /zm/cgi-bin/nph-zms
ssl: false
verify_ssl: false
username: zm
password: 123456

camera:
- platform: zoneminder

第一块红框就是 zoneminder 相关的部分

第二块红框是 直连巨峰摄像头的部分

第三块红框是 iSpy 相关的部分

Sensor

configuration.yaml 中加入下面这段代码

1
2
3
sensor:
- platform: zoneminder
include_archived: false

Switch

configuration.yaml 中加入下面这段代码

1
2
3
4
switch:
- platform: zoneminder
command_on: Modect
command_off: Monitor

保存后重启 HomeAssistant 服务

添加卡片,选择 图片概览

按下图设置

标题随便改,原则还是自己容易识别,这是里可以用中文的
相机实体:下拉选 camera.jufeng_rtsp
相机视图:选 live
实体: sensor.jufeng_rtsp_status
实体:sensor.jufeng_rtsp_events

保存之后就能看到实时预览的图像了

建议

功能建议

之所以通过 ZoneMinder 接入,是和 iSpy 一样,要用到监控软件的移动侦测等功能,如果只是查看图像,完全可以直接接入 HomeAssistant。所以我建议将功能改为 移动侦测,这样当检测到物体移动时会产生事件

点事件上的数字,会跳转到详情

HomeAssistant 中也会收到事件通知,结合自动化脚本,可以产生报警、录像等;

性能建议

镜像包有点大,约2G

而资源占用方面还好

虽然只有一路,但是会导致 /dev/shm 在 80% 左右,老苏猜测可能是通过 ffmpeg 做了转码(将 rtsp 转为了 rtmp

这么高的情况下,如果你接入第二路大概率是会失败的,所以比较好的办法是通过命令行来启动容器,因为命令行可以通过设置 --shm-size=4096m 来提高磁盘 I/O 性能,这个值一般最大为内存的一半。

1
2
3
4
5
6
7
8
9
10
11
12
docker run -d --shm-size=2048m \
-v /volume1/docker/zoneminder/config:/config \
-v /volume1/docker/zoneminder/zm:/var/cache/zoneminder \
-e TZ=Asia/Shanghai \
-e ZM_DB_HOST=192.168.0.199 \
-e ZM_DB_NAME=zm \
-e ZM_DB_USER=zm \
-e ZM_DB_PASS=123456 \
-e ZM_DB_PORT=3306 \
--name quantumobject_docker-zoneminder1 \
-p 3380:80 \
quantumobject/docker-zoneminder:latest

/dev/shm 现在在 1% 左右

接入乐橙 A2X

又找同事借了一个乐橙 A2X,网上查到乐橙摄像头的 RTSP 地址是

1
2
# RTSP 地址
rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
  • username:用户名,默认为admin;
  • password:密码,如果你没有改过密码,那就是摄像机底部的安全码;
  • ip:为设备IP;
  • port:端口号默认为554,若为默认可不填写。
  • channel:通道号,起始为1。例如通道2,则为channel=2。
  • subtype:码流类型,主码流为0(即subtype=0),辅码流为1(即subtype=1);

最后的填写的信号源路径:

rtsp://admin:L22E6229@192.168.0.182:554/cam/realmonitor?channel=1&subtype=0

取的主流,所以分辨率设为了 1080P

/dev/shm 上升到了 9% 左右

资源占用比 1 路时上升很多,毕竟乐橙是 1080P 画质的

HomeAssistant 中不用再设置,只要添加卡片就可以了

最后 Mark 一下版本:

  • ZoneMinder 的版本是 v1.34.23
  • HomeAssistant 的版本是 2021.5.4
  • MariaDB 的版本是 5.5.59

参考文档

ZoneMinder - Home
地址:https://www.zoneminder.com/

ZoneMinder/zoneminder: ZoneMinder is a free, open source Closed-circuit television software application developed for Linux which supports IP, USB and Analog cameras.
地址:https://github.com/ZoneMinder/zoneminder

ZoneMinder/zmdockerfiles: Dockerfiles for the ZoneMinder project build system and for running ZoneMinder
地址:https://github.com/ZoneMinder/zmdockerfiles

常见网络摄像机的端口及RTSP地址 - 天一生水
地址:https://www.jiangyu.org/port-and-rtsp-address-of-several-ipcams/