ZoneMinder中文文档
(持续更新中,希望各位同仁核对校正)(http://zoneminder.readthedocs.io/en/latest/index.html#)
导语 3
安装指导 4
·Ubuntu指导 4
-简易方法:使用程序包安装ZoneMinder(Ubuntu15.x+) 4
·Debian指导 8
·Redhat指导 8
-相关知识:RHEL, CentOS, and Clones 8
-相关知识:Fedora 8
-Zmrepo:一个ZoneMinder的RPM版本库 8
·多服务器安装 8
--拓扑设计注释 9
--新安装 9
用户指南 12
·简介 12
·组件 13
--系统概略 13
--进程 14
--PHP 15
--Perl 15
·开始 18
--启用认证 18
--切换到扁平主题 18
--理解WEB控制台 18
--添加监控器 18
--总结 18
·定义监控器 18
--监控器选项 18
--来源选项 18
·定义区域 19
--基本参数 19
·查看监控器 19
·事件过滤 19
--保存过滤 19
--过滤器如何工作 19
--日期格式的相对条目 19
--相对条目警告 19
--故障忠告 19
·查看事件 19
--管理事件选项详细 19
·选项 19
--显示 19
--系统 20
--配置 20
--路径 20
--Web 20
--图像 20
--登录 20
--网络 20
--邮件 20
--上传 20
--X10 20
--高级、中级、低级 B/W 20
--用户 20
·摄像器控制 20
·控制监控器 21
--控制流 21
--控制属性 21
--控制脚本 21
·移动设备 21
--第三方移动客户端 21
--使用原有web控制台 21
--停用客户端 21
·登录 21
API 21
常见问题 21
贡献 21
导语
欢迎来到ZoneMinder文档,以下资源是可用的。
安装指导
许多发布的的是ZoneMinder的旧版本,当前版本包含了修复好的BUG和更新功能。这里的安装说明是更新软件包或者使用源码编译安装。
用户指南
初次安装ZoneMinder的设置指导和ZoneMinder前端使用详细指南。
API
使用基于CakePHP的API与ZoneMiner交互的api信息。
常见问题
一些经常问到的问题。
贡献
如何向ZoneMinder贡献代码和功能。作为一个社区项目,我们一直需要帮助,你不必成为一个程序测试员,或者更新文档。
安装指导
·Ubuntu指导
-简易方法:使用程序包安装ZoneMinder(Ubuntu15.x+)
这些方法适用于全新的Ubuntu15.x+,尚未安装ZoneMinder的系统。
步骤1:确保我们添加正确的程序包
sudo add-apt-repository ppa:iconnor/zoneminder
sudo apt-get update
如果之前系统没有安装Mysql:
sudo apt-get install mysql-server
这一步将要求你为数据库设置一个管理员密码(当你安装mysql服务时将被要求输入一个root用户密码)
步骤2:安装ZoneMinder
sudo apt-get install zoneminder
步骤3:配置数据库
sudo mysql -uroot -p < /usr/share/zoneminder/db/zm_create.sql
mysql -uroot -p -e "grant select,insert,update,delete,create,alter,index,lock tables on zm.* to 'zmuser'@localhost identified by 'zmpass';"
并不是必须要这一步,但无妨(如果你更新了数据可则需要)
sudo /usr/bin/zmupdate.pl
步骤4:配置系统以识别ZoneMinder,并正确配置Appache
sudo systemctl enable zoneminder
sudo a2enconf zoneminder
sudo a2enmod cgi
sudo chown -R www-data:www-data /usr/share/zoneminder/
我们需要这一步似的API路由选择能工作
sudo a2enmod rewrite
这可能是 iconnor于2015年10月发布的1.28.107版PPA程序包中的一个bug,之后安装 zm.conf 没有正确的读写权限,因此我们需要修复这个bug。在以后的ppa发布版本中,这个bug将不存在。
sudo chown www-data:www-data /etc/zm/zm.conf
我们同样需要安装php5-gd(1.28.107版本,php没有安装)
sudo apt-get install php5-gd
步骤5:编辑PHP中的timezone
vi /etc/php5/apache2/php.ini
查找Date,你将在文件里看到注释了的date.timezone,删除注释,并制定date.timezone。请确保date.timezone有效(参见:http://php.net/manual/en/timezones.php)
我的例子是:
date.timezone = America/New_York
步骤6:重启服务
sudo service apache2 reload
sudo systemctl restart zoneminder
步骤7:确保直播流能工作,确保你能看到监控直播流
在你的浏览器中启动ZM控制台,转到 Options->path,并确保 PATH_ZMS 设置为 /zm/cgi-bin/nph-zms,然后重启ZM(你用程序包安装则不必做这一步,因为程序包安装ZM控制台自动工作)
步骤8:如果你在数据库中改变了zmuser/zmpass,那么API则不知道这个改变。
如果你在安装之后修改数据库登录密码,API则连接不到数据库。如果存在这种情况,到zoneminder/www/api/app/Config,并编辑database.php,有一个叫DATABASE_CONFIG的类,修改$default数组以便映射你的详细数据,例如:
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'mynewDBusername',
'password' => 'mynewDBpassword'
'database' => 'zm',
'prefix' => '',
//'encoding' => 'utf8',
);
你已经安装完毕,让我们开始确保各项程序工作:
-确保ZM和API工作
1.打开一个浏览器,跳转到http://localhost/zm,将启动ZM
2.(OPTIONAL - just for peace of mind)打开一个(tab)标签,跳转到http://localhost/zm/api,将启动一个展示CakePHP的绿色格子,绿色表示正常。如果你看到红色,或者看不到绿色,可能出现了问题(也许没有)。忽略所有显示“DebugKit没有安装”的黄色格子,你不需要Debug。
3.在同一个浏览器中打开新标签,跳转到http://localhost/zm/api/host/getVersion.json,如果回应一些如下的消息:
{
"version": "1.28.107",
"apiversion": "1.28.107.1"
}
那么你的API已经开始工作了。
-确保ZM和API安全工作:
1.在ZM中启用OPT_AUTH;
2.在浏览器中登出ZM;
3.在同一个浏览器中打开新标签,跳转到http://localhost/zm/api/host/getVersion.json,将显示“Unauthorized”及很多文字。
4.跳转到新标签并登录ZM
5.重复步骤3,并显示出ZM和API的版本信息。
祝贺你,已经安装完毕。
·Debian指导
·Redhat指导
-相关知识:RHEL, CentOS, and Clones
-相关知识:Fedora
-Zmrepo:一个ZoneMinder的RPM版本库
·多服务器安装
用统一的接口管理并运行多个ZM服务是有可能的,为了实现这个目标每个zoneminder服务器连接到一个共享数据库服务器和存储事件数据文件。
图1 多服务器拓扑结构图
--拓扑设计注释
1.硬件标识表示各个独立的逻辑功能,并不是独立的硬件。例如,数据库服务器和ZM服务器可以常驻于同一个物理硬件。
2.配置各个ZM服务器以便使用同一个远程数据库服务器(绿色)。
3.存储服务器代表共享的存储空间(红色),可被所有的ZM服务器读写。挂在每个ZM服务器的事件文件中。
4.为了系统更好的表现需至少创建2个网络。设置专属的存储局域网以便数据库服务器和共享存储服务器之间通信。如果可以使用多通道和巨型帧(jumbo frames)。让其他所有的通信避开专属的存储局域网(Storage LAN)。设置第二个专属局域网,在图中交Video LAN,用于其他所有的信息通信。
--新安装
1.根据你的发布版的常规说明,以通用方式安装ZM到所有ZM服务器。只需要一个数据库作为独立,或在一个ZoneMinder服务器。
2.在每个ZM服务器中编辑 zm.conf,找到ZM_DB_HOST 变量并设置成你数据库服务器的名称或ip地址,找到 ZM_SERVER_HOST 并输入一个名称以代表ZM服务器,用一个容易区别牢记的名字。这个名字须是ZM的DNS或其他网络连接未使用的。
3.复制其中一个ZM服务器的 /usr/share/zoneminder/db/zm_create.sql 到作为数据库服务器的机器。
4.安装mysql/mariadb 服务到数据库服务器。
5.建议运行 mysql_secure_installation 以协助数据库安全运行。
6.使用在之前安装设置的root用户密码,创建 ZM 数据库,并为ZM配置一个用户:
mysql -u root -p < zm_create.sql
mysql -uroot -p -e "grant all on zm.* to 'zmuser'@localhost identified by 'zmpass';"
mysqladmin -u root -p reload
用户凭证 zmuser/zmpass 是任意的,根据你的环境设置为任何凭证。注意,这些只是一些例子,在你的环境中未必安全。
7.如果你选择修改数据库用户凭证而不是zmuser/zmpass,那么你必须为每一个ZM 服务器更新zm.conf,修改ZM_DB_USER 和ZM_DB_PASS 为之前设置的用户名和密码。
另外,你必须以类似的方式修改/usr/share/zoneminder/www/api/app/Config/database.php。向下滚动找到值并修改为之前设置的用户名和密码。
8.所有的zm服务器必须共享一个通用的事件文件,根据操作系统的支持可以任何方式完成共享。从存储服务器,共享/导出一个文件夹用于ZoneMinder事件。
9.从每个ZoneMinder服务器,将在存储服务器上共享事件文件夹挂载到当地ZoneMinder服务器上。
注意:在各个发行版中,共享事件文件夹位置不同。Redhat发行版在“/var/lib/zoneminder/events”,Debian发行版在“/var/cache/zoneminder/events”,这个文件夹不是链接文件夹。
10.打开浏览器并跳转到任意一个ZM服务器WEB控制台(他们都是一样的),打开选项,选址TAb标签,为所有ZM服务器填入选项值。每个服务器拥有名称和主机名选项,名称是在步骤2所设置的ZM_SERVER_HOST,主机名是ZM服务器使用的网络名称或ip地址。
11.当创建一个监控器,记住要在下拉选项中选择ZM服务器,这个摄像机将被分配到所选的ZM服务器。
用户指南
·简介
欢迎来到ZoneMinder,一个一体化的Linux GPL安保视频监控解决方案。
多数商用“安保系统”设计为监控录像系统,同时也录音。录音质量从差到不可用,定位相关视频也是从充满挑战到不切合实际,常常需要手动导出。ZM主要设计为录像,并允许简单搜索和导出。录像尽可能高质量,方便过滤和查找,在任何操作系统上使用浏览器导出。ZM也实现监控控制。
ZM围绕一系列独立组件而设计,这些组件的作用在于限制资源浪费和最大化机器效率。一个相对老旧的奔腾II个人电脑以25帧/秒追踪一个摄像头,对于同一个设备上几乎降低了一半的要求。在其他设备上的摄像头互不影响以致可以保持这一帧率不变。由于帧处理设计为异步方式捕捉图像,监视多个摄像头仍然未超载cpu和延迟。
与速度一样,ZM设计为使用友好。与快速的视频接口一样,ZM带来综合友好的PHP WEB界面,让你在家、在工作、在路上,直至在能上网的移动设备上控制和监视摄像头。它支持基于可用宽带的多变的web功能。Web接口让你可以查看摄像机捕捉视频事件、存档视频、回放视频,或者删除你不想使用的摄像机。Web页面直接与核心进程交互,保证随时全面相互合作。ZM也可以安装为一个系统服务,以保证你的电脑因其他原因重启后仍能正常运行。
ZM的核心是捕捉和分析图像,有一个高度可配置的参数允许您确保可以消除误报,同时确保任何你不想错过的画面将被捕获并保存。ZM运行你为每个摄像机定义“区域”的敏感性和功能。这使你排除不感兴趣追踪的区域,或者定义与其他区域结合后超过了各种阀值的报警区域。
ZM是免费的,但如果你发现他有用,请查看http://www.zoneminder.com/donate.html,并想ZM资助以改进其他功能。
·组件
ZM不是一个单集成软件,而是由多个组件组成。这些组件主要包含了视频处理工作的可执行编译文件,完成通常帮助和其他额外任务的perl脚本,以及用于web接口php脚本。
--系统概略
以下插图是ZM关键组件的高级示意图表。
以下是各个组件的原理描述:
--进程
1.zmc
这是ZoneMinder捕获守护进程。这个进程的工作是监控一个视频设备,并且尽可能快的捕捉图像帧,这或多好少应该是恒速运行。
2.zma
这是ZoneMinder分析守护进程。这个组件收集捕获的图像帧,并作解析可能引起警告的运动事件。它通常要与zmc保持相同工作效率,如果很忙可能会跳过一些帧来防止它落后于捕捉进程。
3.zmf
这是ZM帧率进程。这是一个可选与分析进程协调运行的进程,它的功能是直接写捕捉帧图像到硬盘,这可以解放分析进程以致它可以做更多分析工作,更好的保持与捕捉进程同速。如果不运行zmf,那么分析进程则自己写入硬盘。
4.zms
Zms是一个视频流服务。Web接口连接zms获取实时或历史的流图像。Zms只有在一个监控流或事件流可见时运行,在事件结束或关联web页面关闭时销毁。如果你发现有多个zms进程运行并且没有页面可见,那么你可能需要下载apche补丁(参见“故障诊断”部分)。
5.zmu
Zmu是ZM实用进程。它主要是拥有多个有用功能的命令行接口。它不仅除了web页面意外可以被任何进程/用户实用(目前为止只有有限的帮助文档),而且必要的、特别的调试视频问题是可用。
--PHP
同样,在web目录下有php文件。当前,这些包含经典和平扁风格的皮肤风格。
经典风格:原始的ZM皮肤
扁平风格:一个升级版的经典风格,以更多现代方式保持同样布局。最初的皮肤现在只是一个CSS样式。
--Perl
最后,perl脚本在脚本目录里面。这些脚本有可见于文件头的配置,必要时可以手动修改。脚本如下所列:
1.zmpkg.pl
这是ZM packge控制脚本。这个脚本经常被web接口和服务脚本用于控制系统作为整体执行。
2.zmdc.pl
这是ZM 进程控制脚本。这个脚本被web接口和zmpkg.pl使用于控制和维持视频捕捉和分析进程。没有必要手动运行这个脚本。
3.zmfilter.pl
这个脚本控制保存过滤器的运行,由web接口基于是否有定义为自发的过滤器来启动和停止。这个脚本也负责事件自动上载到第三方服务平台。
4.zmaudit.pl
这个脚本是用来检查事件文件系统和数据库的一致性。它可以删除孤立事件,即那些出现在一个位置,而不是其他检查为相关的事件表的事件。它可以从命令行或类似cron脚本以交互式和批处理方式运行。在zmconfig.pl,有一个选项制定快速事件删除web接口只从数据库本身删除事件入口。如果这个选项被设置,那么这个脚本即整理了rest。
5.zmwatch.pl
这是一个简单的脚本,纯粹设计为捕捉进程设置监视眼,并在捕捉进程锁死时重启。它是视频驱动引起的广为人知的同步问题,这个脚本保证一些重要的内容以免丢失。
6.zmupdate.pl
目前这个脚本负责检测新版ZM是否可用和升级、迁移相关的各种动作。同时,脚本想要做“一站式购物”的升级,并执行必要的措施以便升级当前安装版本为新版本。
7.zmvideo.pl
这个脚本被web界面使用来以常见方式生产不同格式的媒体文件。你也可以在确定环境下通过命令行使用这个脚本,但这通常没有必要。
8.zmx10.pl
这是一个可选的脚本,该脚本可用于启动和监控X10家庭自动化风格事件,并于警报系统交互通过ZoneMinder事件生成X10信号,或者初始化ZoneMinder监测和捕获来自其他地方X10信号,例如一个X10 PIR的触发。例如我有几个不做运动检测的摄像头,直到我装备报警系统,于是当警报系统产生一个X10信号并被ZoneMinder接收时,这些摄像头将切换到主动检测模式。
9.zmtrigger.pl
这是一个可选脚本,是一个更加通用的外界警报触发解决方案。它可以通过网络socket、unix socket和文件/设备接口操作外部链接。如果你可以使用原有格式交互,那么你可以照着原来的样子使用这个脚本,或者重写链接和频道以定制化你的需求。Zmtrigger.pl使用的触发格式如“
id:ZM 监控器的名称或者序号。
action:“开、关、取消、显示”,“开”强制打开一个警报条件,“关”强制关闭一个警报条件,“取消”忽略之前设置的开、关,“显示”仅仅更新一些可以被显示在图像被监控的辅助文本。通常情况下,你要使用“开”和“取消”,“关闭”会被用来抑制运动事件。另外“打开”和“关闭”会花费额外的时间偏移量,如在 “on+20”自动取消的前面的行动之后的秒数。
score:“数值”是给定报警数值,通常会显示它的重要性。例如“打开”触发应该为非零,否则应该为零值。
cause:最大32个字符,指明警报的原因或来源,例如“Rely 1 open”。这个保存在事件的“cause”域值中,忽略“关闭”和“取消”消息。
text:最大256字符的额外信息域,保存在事件的“description”域值中,忽略“关闭”和“取消”消息。
showtext:相当于可以在时间戳中显示的32特征,可以添加到图像,show动作设计为在不影响警报的前提下更新文字,如果存在,则为任何动作。这个设计为允许外部输入显示在捕捉图像上,例如温度和人员身份等。
注意,可以一次性发送多个以换行符或回车换行符分隔的消息,这个脚本不仅仅本身是个解决方案,而且可以以“粘合”方式协助ZM与其他系统交互。它几乎肯定会需要一些定制才能使用它。如果你要做的就是从外部源生成警报,那么使用ZoneMinder::SharedMem perl模块可能会更容易。
·开始
--启用认证
--切换到扁平主题
--理解WEB控制台
--添加监控器
--总结
·定义监控器
--监控器选项
--来源选项
时间戳选项
缓存区选项
控制选项
X10选项
Misc选项
·定义区域
--基本参数
·查看监控器
·事件过滤
--保存过滤
--过滤器如何工作
--日期格式的相对条目
--相对条目警告
--故障忠告
·查看事件
--管理事件选项详细
·选项
--显示
--系统
--配置
--路径
--Web
--图像
--登录
--网络
--邮件
--上传
--X10
--高级、中级、低级 B/W
--用户
·摄像器控制
·控制监控器
--控制流
--控制属性
--控制脚本
·移动设备
--第三方移动客户端
--使用原有web控制台
--停用客户端
·登录
API
使用基于CakePHP的API与ZoneMiner交互的api信息。
常见问题
一些经常问到的问题。
贡献
如何向ZoneMinder贡献代码和功能。作为一个社区项目,我们一直需要帮助,你不必成为一个程序测试员,或者更新文档。