




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章网络视频监控Linux开发案例网络视频监控Linux开发案例本章分析Linux技术在网络视频监控中的应用,共分2个模块:
1.系统总体设计与Linux驱动开发:先进行系统总体设计分析,分析mjpg-streamer技术,进行mjpg-streamer开发调试和mjpg-streamer视频采集程序设计,并实现USB摄像头网络监控。2.安防报警功能开发:先进行软件界面框架分析,配置信息保存功能设计、燃气传感器Linux驱动开发、报警管理功能设计、报警拍照功能设计,并实现视频安防系统。第4章网络视频监控Linux开发案例
4.1视频采集系统总体设计与功能开发网络视频监控Linux开发案例嵌入式Linux的视频应用系统目前主要有以下应用领域:远程监控、监控视频录制、嵌入式视觉系统、视频传感器。本项目是嵌入式Linux中使用摄像头的应用示例,是一种基于Internet视频监控在嵌入式系统中的解决方案,并介绍了这种嵌入式设备的硬、软件组成以及实现难点.通过这套设备,便可以利用终端机的网页浏览器访问、配置挂接其上的网络摄像头,从而达到重复利用Internet资源进行视频监控的目的。功能需求如表所示。4.1.1系统总体设计分析
系统需求分析功能功能说明视频监控功能实时显示USB摄像头视频流报警日志功能显示当前传感器报警状态,记录报警日志,保存最近10条报警信息,联动拍照开关设置。报警图片功能显示最近4张报警照片网络视频监控Linux开发案例网络视频安防系统,其硬件主要边缘计算网关、Arm扩展模块与高清摄像头构成。边缘计算网关连接高清摄像头实时采视频数据通过mjgp-streamer服务可以通过PC端的浏览器实时查看,网关连接Arm扩展模块的TVOC传感器实时采集气体数据作为燃气超标的依据产生安防警报,PC端的WEB管理界面可实时查看传感数据,进行报警参数设置,查看报警记录与报警照片,硬件结构框如图所示。4.1.1系统总体设计分析
系统总体设计网络视频监控Linux开发案例网络视频安防系统,其软件模块主要由硬件驱动程序、Boa服务软件、mjpg-streamer服务软件、安防应用主控软件、PC端Web管理软件构成,软件总体结构框图如图所示。4.1.1系统总体设计分析
系统总体设计网络视频监控Linux开发案例mjpg-Streamer是一个开源项目,其基本功能是从一个uvc内核摄像头读取内容,然后将它推送到本地的8080端口上面,实际为一个本地的视频服务器,其功能架构如图所示4.1.2mjpg-streamer网页显示视频mjpeg-streamerJPEG图片USB驱动V4L2驱动设备驱动uImage(硬件)USB摄像头设备端网络视频监控Linux开发案例UVC摄像头免驱动摄像头,是一种遵循视频设备类(USBVideoClass,简称UVC)标准协议的摄像头。将符合标准的摄像头连接到符合标准的操作系统,系统就会自动为其安装驱动并进行设置,使摄像头实现真正意义上的即插即用。uvc是一种硬件的框架结构,只有当其是通过一种标准的设计使其实现了免驱;而V4L2是一种驱动程序,其是实现系统与uvc设备等的通信。MJPG编码格式MJPG是MJPEG的缩写,MJPEG全名为:MotionJointPhotographicExpertsGroup”,是一种视频编码格式,MotionJPEG技术常用与闭合电路的电视摄像机的模拟视频信号“翻译”成视频流,并存储在硬盘上。典型的应用如数字视频记录器等。MJPEG不像MPEG,不使用帧间编码,因此用一个非线性编辑器就很容易编辑。MJPEG的压缩算法与MPEG一脉相承,功能很强大,能发送高质图片,生成完全动画视频等。但相应地,MJPEG对带宽的要求也很高,相当于T-1,MJPEG信息是存储在数字媒体中的庞然大物,需要大量的存储空间以满足如今多数用户的需求。因此从另一个角度说,在某些条件下,MJPEG也许是效率最低的编码/解码器之一。MJPEG
是24-bit的“true-color”影像标准,MJPEG的工作是将RGB格式的影像转换成YCrCB格式,目的是为了减少档案大小,一般约可减少1/3~1/2左右。4.1.2mjpg-streamer网络视频监控Linux开发案例MJPEG与MJPG的区别:1)MJPEG是视频,就是由系列jpg图片组成的视频。2)MJPG是MJPEG的缩写,但是MJPEG还可以表示文件格式扩展名。mjpg-streamer1)mjpg-streamer是一个命令行应用程序,它将JPEG帧从一个或多个输入插件复制到多个输出插件。它可用于通过基于IP的网络将JPEG文件从网络摄像头流式传输到各种类型的查看器,如Chrome,Firefox,Cambozola,VLC,mplayer和其他能够接收MJPG流的软件。2)它最初是为嵌入式设备编写的,在RAM和CPU方面资源非常有限。其前身“uvc_streamer”的创建是因为Linux-UVC兼容相机直接生成JPEG数据,即使是运行OpenWRT的嵌入式设备,也可以实现快速和流畅的M-JPEG流。输入模块“input_uvc.so”从连接的网络摄像头捕获这样的JPG帧。mjpg-streamer现在支持各种不同的输入设备。源码结构分析如图所示。4.1.2mjpg-streamer(源码结构分析图请查看文档)网络视频监控Linux开发案例4.1.3mjpg-streamer开发调试mjpg-streamer是开源项目,其软件包可直接在网上下载,下载安装后进行简单的配置可运行服务,查看运行效果。主要步骤如下:1)下载mjpg-streamer源码2)make命令编译并安装3)Linux网关连接摄像头4)启动视频采集与输出5)浏览器输入mjpg-streamer服务IP地址进行测试(详细命令步骤请查看文档)网络视频监控Linux开发案例4.1.4mjpg-streamer视频采集程序设计mjpg-streamer服务软件安装运行后会提供一个HTTP服务,通过HTTP服务可以自行开发WEB应用程序,对采集的视频图像进行处理。程序中首先通过样式表定义了一个webcam的显示区域,核心功能过通过javascript脚本实现,varimg=newImage()会创建一个图片对象img,通过mjpg-streamer服务获取图片,再利用文档对象webcam在页面上显示,实现代码如下:(视频采集WEB程序源码详细请查看文档)img.src="70:8080/?action=snapshot&n="+(++imageNr);varwebcam=document.getElementById("webcam");webcam.insertBefore(img,webcam.firstChild);网络视频监控Linux开发案例4.1.5开发实践:USB摄像头网络监控1、摄像头连接与设置本项目中使用到智能网关、高清摄像头。高清摄像头连接网关的USB3.0接口,如图所示。(详细命令步骤请查看文档)检测USB摄像头的连接状态:输入命令”ls/dev”可以看到红框中有video0设备可以说明usb摄像头正常运行,如图所示。网络视频监控Linux开发案例4.1.5开发实践:USB摄像头网络监控2、mjpg-streamer编译与安装3、mjpg-streamer服务启动测试(详细命令步骤请查看文档)在网关的任意目录下通过下述命令启动mjpg-streamer服务:/usr/local/bin/mjpg_streamer-i"/usr/local/lib/mjpg-streamer/input_uvc.so-n-f24-r800x600"-o"/usr/local/lib/mjpg-streamer/output_http.so-p8080-w/usr/local/share/mjpg-streamer/www"网络视频监控Linux开发案例4.1.5开发实践:USB摄像头网络监控4、mjpg-streamer视频程序测试(详细命令步骤请查看文档)将“MjpgStreamer”目录下测试页面文件index.html复制到/usr/local/share/mjpg-streamer/www目录下。在网关的任意目录下通过下述命令启动mjpg-streamer服务::在网关或开发电脑的浏览器输入网关的IP地址与服务端口号70:8080。页面上有一个“Paused”暂停按钮可以停止视频流的显示,如图所示。网络视频监控Linux开发案例4.1.6小结本节学习了网络视频安防系统的总体的硬件与软件结构框架,Linux系统中主流的mjpg-streamer视频采集处理软件学习了mjpg-streamer软件的安装与测试,视频采集程序的二次开发学会通过USB摄像头网络监控实践,掌握完整的Linux嵌入式系统的视频采集、网络传输、WEB显示的流程与步骤。网络视频监控Linux开发案例
4.1.7思考与拓展1、mjpg-streamer视频服务器有哪些功能?2、mjpg-streamer服务器启动视频采集与网页输出使用什么命令,命令参数分别是什么?第4章网络视频监控Linux开发案例4.2安防报警功能开发网络视频监控Linux开发案例项目采用Web服务器BOA提供服务,最终软件界面使用WEB框架实现,根据功能需求设计为三个主要的功能界面,分别如下:1)视频监控页面:通过mjpg-streamer实时显示USB摄像头视频流。2)报警设置页面:显示当前传感器报警状态,报警参数设置,显示报警日志。3)报警显示页面:显示报警拍摄的照片。4.2.1软件界面框架分析网络视频监控Linux开发案例系统中有一项比较重要的功能配置信息保存功能,通过数据结构保存到文件,与文件到数据结构的形式实现。源码中的配置信息最终都保存到以下宏定义的文件中:4.2.2 配置信息保存功能设计#defineCONFIG_FILE"/home/zonesion/www/cfg.dat"函数名称函数说明intcreate_default_config(structst_sys*dev);初始化结构体的默认配置信息,并保存到文件intsave_dev(structst_sys*dev);把结构体的数据保存到文件中intload_dev(structst_sys*dev);从文件中读取数据到结构体中(Config文件源码详细请查看文档)网络视频监控Linux开发案例燃气传感器的引脚4接ADIN引脚,连接的是rk3399内部的adc1通道,如图所示。。4.2.3燃气传感器Linux驱动开发(具体命令详细请查看文档)ADC驱动已经被编译到缺省内核中,因此不需要使用insmod方式加载。linux系统已经自带有了ADC通用驱动文件,它是以平台驱动设备模型的架构来编写的,里面是一些比较通用稳定的代码,但是该通用驱动文件并不完善,有些函数是并不存在的。ADC驱动也可以使用混杂(misc)设备驱动来进行编写,ADC的驱动实现方法种类繁多,本节采用内核自带的ADC驱动。网络视频监控Linux开发案例1)设备树文件位于gw3399-linux/kernel/arch/arm64/boot/dts/rockchip/rk3399.dtsi2)重要结构体4.2.3燃气传感器Linux驱动开发(具体命令以及pobe源码详细请查看文档)
传感器Linux驱动分析staticconststructiio_inforockchip_saradc_iio_info={ .read_raw=rockchip_saradc_read_raw,//rockchip_saradc_read_raw函数用来读取adc数据 .driver_module=THIS_MODULE,};3)pobe函数probe函数实现了寄存器地址的设置,时钟频率,参考电压等设置网络视频监控Linux开发案例燃气传感器的ADC驱动测试通过sysfs方式进行操作,首先调用open函数打开按键设备文件"/sys/devices/platform/ff100000.saradc/iio:device0",接着在adcReadRaw中调用设备文件的read函数读取ADC接口原始电压数据,读取的数据在adcReadCh0Volage函数转换成有效气体检测数据。4.2.3燃气传感器Linux驱动开发(仅展示部分代码具体源码详细请查看文档)Linux应用程序接口intadcReadRaw(intch){ intret=-1; if(ch>=0&&ch<=5){ charbuf[128]; snprintf(buf,128,DEVDIR"/in_voltage%d_raw",ch); intfd=open(buf,O_RDONLY); if(fd>0){ ret=read(fd,buf,128); if(ret>0){ buf[ret]='\0'; ret=atoi(buf); } close(fd); }网络视频监控Linux开发案例报警主应用程序是系统项目在网关上运行的核心程序,程序运行流程与功能说明:1)初始化共享内存、命令管道2)load_dev(g_dev)加载配置文件数据3)启动mjpg-streamer服务4)读取TVOC传感器数据5)对传感器当前数值与设置的限值进行比较,超限报警拍照并记录6)从命名文件读取用户设置的报警限值7)系统结构体数据复制到共享内存8)数据保存到配置文件9)休眠1秒继续到4)步骤进行循环4.2.4报警管理功能设计
报警主应用程序设计函数名称功能说明void*set_web_shm(void);设置共享内存intinit_fifo(void);初始化命名管道Voidcopy_to_shm(structst_sys*shm_dev);
voiddo_snap(void);系统报警后的拍照功能处理(主应用程序源码详细请查看文档)网络视频监控Linux开发案例本项目中使用到共享内存与命名管道的进程间通信机制,共享内存用于主应用程序与Web应用程序间共享系统主结构体数据,命名管道用于Web应用程序向主应用程序传递用户设置的配置信息,通信结构图如图所示。Linux进程间通信设计4.2.4报警管理功能设计(源码详细请查看文档)网络视频监控Linux开发案例报警设置页面功能由两个程序构成,说明如下:1)alarm.cgi程序,显示传感数据,进行报警参数设置,显示报警记录。2)alarm_post.cgi程序,接收用户设置的报警上限值写入命名管道中。用户通过web页面的表单的get方法把设置的上限值传给后台的CGI程序处理,后台CGI程序通过getenv()读取环境变量获得数值写入命名管道。
报警设置页面设计4.2.4报警管理功能设计(报警设置页面程序源码以及alarm_post.c程序文件源码详细请查看文档)网络视频监控Linux开发案例系统主程序中会定时判断(30秒)当前采集的燃气传感器数据是否超过用户设置的上限值,如果超过会调用do_snap()函数进行处理。处理流程如下:1)执行脚本文件kill_mjpg.sh关闭系统中的mjpg_streamer后台服务进程2)删除照片保存目录下旧照片3)通过mjpg-streamer服务的output_file.so文件输出功能,把视频流保存为jpeg文件4)sleep(5)休眠5秒钟,让mjpg-streamer服务可以保存4张照片文件5)执行脚本文件kill_mjpg.sh关闭系统中的mjpg_streamer后台服务的照片输出进程6)重新启动mjpg-streamer服务的output_http.so网页视频流输出功能7)把照片保存目录下的文件重新命名,方便照片显示网页读取显示
触发拍照功能设计4.2.5报警拍照功能设计网络视频监控Linux开发案例报警图片显示页面是html程序,功能是读取指定目录下的指定文件名图片在页面上显示,如图所示。
报警图片显示页面设计(完整源码详细请查看文档)4.2.5报警拍照功能设计网络视频监控Linux开发案例1、硬件连接与测试本项目中使用到智能网关、高清摄像头。高清摄像头连接网关的USB3.0接口,硬件连接如图所示。4.2.6开发实践:视频安防系统网络视频监控Linux开发案例2、Boa编译与安装1)通过Moba软件复制boa源码到边缘计算网关2)解压源码,运行配置命令./configure(完整命令源码详细请查看文档)4.2.6开发实践:视频安防系统3)修订源码4)boa配置网络视频监控Linux开发案例3、安防管理功能测试在网关的当前用户目录创
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级英语教学工作总结
- 会计服务合同范本要求
- 劳务保证合同范本
- 乡村自建房屋买卖合同范本
- 个人楼房出租合同范本
- 《福楼拜家的星期天》教学反思
- 卖矿中介合同范例
- 出售进口吊车合同范本
- 井盖经销合同范本
- 单纯汽车租赁合同范本
- 高压发电机细分市场深度研究报告
- 新闻采访与写作课件第十五章其他报道样式的写作
- 小学语文单元整体作业设计案例(五年级下册第六单元)
- 解读 国家数据局首批20个“数据要素x”典型案例-31正式版-WN8
- 《跨境直播运营》课件-跨境直播的意义和要素
- 3 学会反思(教学设计)部编版道德与法治六年级下册
- 第一单元 歌唱祖国-《 中华人民共和国国歌》课件 2023-2024学年人音版初中音乐七年级上册
- 2024-2030年中国肾性贫血疗法行业市场发展趋势与前景展望战略分析报告
- DL∕T 1281-2013 燃煤电厂固体废物贮存处置场污染控制技术规范
- 办公家具采购项目质量保证售后服务承诺书
- 2024年时政试题库(b卷)
评论
0/150
提交评论