在基于Web的视频监控解决方案通过开源软件ZoneMinder实现,通过Web访问的关键在于mjpg-streamer,因为它可以通过HTTP方式访问Linux UVC兼容摄像头。本文对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/


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" -- 指定输入插件和输出插件,同时指定输出的端口


实战:下面对于启动视频监控的命令,如图1所示,下面进行解释。

图1

大家需要注意在 input 和 output 之间传递时使用的是 jpeg 图片,而不是视频信息。所以对这些图片序列必须进行压缩,而且采用平率不能太大,一般VGA分辨率 5帧/s。

  • output_file 将视频图片保存在本地。

  • output_udp, output_rtsp 在指定端口等待 udp 命令,并将图片数据保存本地

  • output_viewer 通过 SDL 将图片数据解码后,进行显示。

  • input_uvc 通过V4L2 来提取视频,本文采用的 USB摄像头接入方式。

  • 其它 input 的插件都是指对各自己的协议实现的提取,例如input_control 执行一些放大,缩小等之类的功能,能过 v4l2 的相关协议实现。


上面提到的V4L2是Linux内核中关于视频设备的驱动框架,为应用层视频设备程序开发提供了统一的模型和接口,借助该驱动用户可以实现对视频输入,输出接口的统一管理。USB摄像头在工作时,需要V4L2驱动框架的支持,这是在Ubuntu Linux内核中设置为自动加载的,用户不用担心。我们在编译内核的过程中可以清晰查看到,如图2 ~ 图5所示。

图 2

图 3

图 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