ZoneMinder(简称ZM)是一套基于Linux操作系统的摄像机的视像数据监控的应用软件(大家可以简单理解为网络摄像机)。ZoneMinder支持单一或多台视像镜头应用,包括摄取、分析、记录(包括移动侦测功能)、和监视来源,要使ZoneMinder正常运行起来必须首先配置好Linux下的PHP,MySQL环境,而且还有在系统上至少有一个摄像头能稳定工作,接下来就可以通过ZM的web介面监控重要场所了。
使用ZM最大好处是可以在摄像头监视的情况之下实现动态的图像识别,即判断某指定区域之内是否有外来人或物入侵,如果有的话则可以将相关的图像和视频保存起来,并通过网络使得你可以再然和可以连网的地方进行监视。
下文中介绍的基于Web的视频监控解决方案,采用开源软件ZoneMinder实现。其关键技术在于mjpg-streamer的使用,因为它可以通过HTTP方式访问Linux UVC兼容摄像头。软件安装方法可参考我以前的文章,本文主要对mjpg_streamer命令使用方式和输出方式进行详细分析。
一、mjpg-streamer
mjpg-streamer 采用插件的形势来完成相关的功能,主程序为 mjpg-streamer, 插件分输入和输出两大类,输入即取视频的方式,输出即将内容转出的方式。
其中输入包含input_file, input_uvc, input_http, input_opencv, input_raspicam, input_ptp2。而输出包含 output_http, output_file, output_udp,output_rtsp,output_viewer几种方式。
软件下载:https://sourceforge.net/projects/mjpg-streamer/ ZoneMinder - Downloads
二、用途
mjpg_streamer的作用是从摄像头采集图像,并将它们以流的形式,通过基于IP的网络传输到浏览器端。在分析其源码过程中发现,其主要围绕Linux的V4L2接口展开,我们下面在命令行中将要用到的输出插件分为input-plugins、output-plugins、output_file几种,其他插件类型并不常用,这里就不再深入举例介绍。
三、操作命令
命令格式说明:
mjpg-streamer -i "input_uvc.so --help" -- 关于这个输入插件的使用说明
mjpg-streamer -o "output_http.so --help" -- 指定输出的参数说明。
mjpg-streamer -i "input_uvc.so" -o "output_http.so -p 8859" -- 指定输入插件和输出插件,同时指定输出的端口
四、mjpg_streamer实例
下面对于启动视频监控的命令,如下图所示,下面进行解释。
大家需要注意在 input 和 output 之间传递时使用的是 jpeg 图片,而不是视频信息。所以对这些图片序列必须进行压缩,而且采用频率不能过大,一般VGA分辨率下设置为 5 帧/秒。
- output_file 将视频图片保存在本地。
- output_udp, output_rtsp 在指定端口等待 udp 命令,并将图片数据保存本地
- output_viewer 通过 SDL 将图片数据解码后,进行显示。
- input_uvc 通过V4L2 来提取视频,本文采用的 USB摄像头接入方式。
- 其它 input 的插件都是指对各自己的协议实现的提取,例如input_control 执行一些放大,缩小等之类的功能,能过 v4l2 的相关协议实现。
五、IDC机房的综合监控
1)和火灾报警系统的集成
市场上的大多数火灾报警面板都可以选择使用电话线连接到监控办公室。连接后, 面板使用双音多频 (DTMF) 音序列将数据发送到办公室。下图介绍了我们为将火灾报警面板与 OSSIM 集成而设计的解决方案的体系结构。
此扩展应用中在 Astreisk 中配置自动应答, 并在应答时执行 接收Alarm可将警报记录写入日志文件。 专门为OSSIM 的采集插件编写了一个配置文件,该插件将所有日志文件的每个记录归一化为 OSSIM 标准格式, 并将日志条目写入数据库。
2)和ZoneMinder的集成
由于ZM支持很多USB 摄像机, IP 摄像机,只要是标准摄像机都可通过视频捕获接口连接,可以将ZM和OSSIM进行一个集成。下图显示了 ZoneMinder 与 OSSIM 的集成。
我们用 IP 摄像机作为视频源。ZoneMinder 配置为监视机房的摄像机, 并启用移动侦测功能(只要有人活动,视频片段就会被记录到系统在), 在其日志文件会被记录到安全事件。与火灾报警一样, 我们为 OSSIM 的采集插件编写了一个配置文件, 以便在数据库中记录视频事件。目前还没有实现在SIEM控制台中直接调用移动侦测报警所生成的视频这也是今后的努力方向。
六、内核优化
上面提到的V4L2是Linux内核中关于视频设备的驱动框架,为应用层视频设备程序开发提供了统一的模型和接口,借助该驱动用户可以实现对视频输入,输出接口的统一管理。USB摄像头在工作时,需要V4L2驱动框架的支持,这是在Ubuntu Linux内核中设置为自动加载的,用户不用担心。我们在编译内核的过程中可以清晰查看到,如图2 ~ 5所示。
图 4
图 5
不过,只有相关驱动和依赖关系全部匹配并配置正确,摄像头设备才能正常工作。对应设备文件是/dev/video0,如果设备上接了第二个摄像头设备文件是/dev/video1,以此类推。
通过这条命令输出我们可以发现图像分辨率只有 640 X 480,这是VGA的标准分辨率,系统通过将有序的图片序列转换为视频流,在ZoneMinder中采用H.264压缩方式来完成视频流的压缩任务。整个压缩过程完全有软件方式完成。对CPU处理能力要求较高。在zoneminder系统中的ffmpeg软件也是采用H.264视频压缩标准。
参数“-y” 表示输入格式为YUV,如果不加-y 表示 mjpg输入。
- 格式:YUV 它是一种采用格式,说明系统中USB摄像头采集YUV格式的原始图像。
- 图像格式JPG,输出质量为80%
- 通讯端口为TCP 8090,该值可修改。
其它启动方式:
#mjpg_streamer -i “input_uvc.so -y -d /dev/video0 -r 320x240 -f 10”
不指定端口,默认为8080
接下来就可以在浏览器地址栏中输入`http://localhost:8080/?action=stream
来查看视频
七、高级技巧
系统架构完成,如果希望浏览网页时需要用户密码认证则使用下列参数:
-c "username:password" 用户名: username 密码 :password
命令实例:
将jpg图片序列输出到制定的目录下,例如/tmp
/tmp目录发生了哪些变化呢?下图展示的非常清楚了。
八、培训课程
更多新玩儿法大家可以访问《基于Web的视频监控系统-ZoneMinder应用》原创课程。
https://edu.51cto.com/course/17700.html
注意:初学者不建议跨网段尤其是之间连接有网络安全设备的环境下进行实验。