摘要:随着物联网时代的到来,嵌入式设备越来越多,视频监控与安防也越来越得到市场的青睐。网络摄像头应用也越来越多,各类摄像头层出不穷,视频监控行业发展朝着低成本、便捷、智能化的发展方向。该文提出一种基于Mjpg_streamer的视频监控终端,通过中星微ZC301摄像头为采集端,搭载S5PV210处理器的开发板为处理中心,重点研究mjpg_streamer在嵌入式设备中的应用,自己编写插件udp模块,实现视频画面实时流畅传输,以及基于移植的libjpeg库实现jpg和bmp两种图片的软编码实现。这种设计具有广泛应用,使其不再局限于B/S模式的浏览器,可以实现程序由开发者定制。关键词:Mjpg_streamer;软编码;嵌入式;视频监控中图分类号:TP368文献标识码:A文章编号:1009-3044(2017)05-0153-02DOI:10.14004/j.cnki.ckt.2017.0627
1背景随着物联网时代的到来,传统的监控方式成本高、代价大、局限性也很高,已经不能很好地满足当今社会与时代的需求。Mjpg_streamer是基于linux开发的开源视频传输服务器。
通过ZC301摄像头采集的UVC图像画面数据进行jpeg格式压缩,基于TCP/IP协议栈udp进行传输到客户端,这种C/S方式的监控方式比Mjpg_streamer本身携带的http模块传输,更有利于视频数据的编解码,更实时的传输,关键速度更快又能防止网络阻塞。同时基于libjpeg库的软编解码,更适用于嵌入式RGB类显示屏的显示。
程,标准化视频应用接口,广泛应用于视频设备的系统中。
对于USB摄像头,linux驱动层提供了一套标准的文件系统接口open()read()write()close()等基本操作函数,通过这些接口函数完成对zc301摄像头图像的采集。
4Mjpg_Streamer框架分析与udp插件设计Mjpg_streamer是一款开源视频服务器软件,使用的是基于V4L2框架的视频服务器软件设计。Mjpg_streamer由主程序mjpg_streamer和各个输入输出插件组成。主程序载入插件以新线程的形式运行插件。
2系统分析本论文设计系统组成包括了软件部分和硬件部分。该系统采用C/S设计结构,以mjpg_streamer为服务器软件框架,采集端USB摄像头ZC301获取图像,通过mjpg_streamer框架下自己编写的udp模块插件进行实时传输图像,在客户端进行处理显示或其他嵌入式设备进行基于libjpeg库解码在RGB屏中显示。
3系统硬件设计ARMcortex-A8基于armv7架构,超标量微处理器内核,拥有出色的运行效率和功耗效率及泄密控制机制。该论文选用armcortex-A8架构的S5PV210处理器作为其主控单元,其丰富的硬件资源足够支撑软件需求。3.1处理器核心部分处理器部分是视频监控系统的核心,负责与ZC301摄像头图像数据的采集,linux系统中内核中集成了其usb、ZC301等相关驱动模块。通过移植的mjpg_streamer开源视频服务器对图像进行压缩,再经由wifi模块或路由器将视频数据流发送到视频监控端。
3.2V4L2架构下图像数据的获取Video4Linux(简称V4L2)是基于linux内核的应用程序接口,与图像相关,涉及到设备部分控制与图像采集、处理等过
图1经过修改的mjpg_streamer整体结构图其中,input_uvc.so插件:这个插件用来从摄像头获取图像,同时将获取的YUV格式原始图像进行格式转换并压缩为jpeg格式的图像数据。
output_http.so插件:主要是基于http协议的视频图片传输服务器,浏览器可以通过url来动态获取图片。
收稿日期:2017-01-08本栏目责任编辑:唐一东
人工智能及识别技术153
ComputerKnowledgeandTechnology电脑知识与技术式数据保存到本地目录下,output_file.so插件:主要功能是接收到的压缩图像即可以实现对视频图像进行保存。
jpeg格笔者自己实现的output_udp插件:将接收到的jpeg格式图片,通过udp传送到客户端,不保证数据完整接收,但可以大大提高传输速度。与此对应的笔者也编写了客户端进行实时图像播放。
笔者用java编写的与output_udp.so对应的客户端实时显示画面如下:
图2客户端5基于libjpeg的图片编解码是从左下角到右上角的整行排列。需要移植bmp图片是最接近RGB裸数据的,bmp中RGB数据存放只S5PV210的交叉工具链。
开发板中,修改编译器为开发板提供的libjpegarm-linux-gcc源码库到下面是基于libjpeg库进行编解码的核心步骤。5.1jpeg格式图片转换成bmp格式(核心就是RGB格式)press_structjpeg_create_decompress(&cinfo);//初始化jpeg_decom⁃片文件
jpeg_stdio_src(&cinfo,结构体数据
inputfile);//绑定需要解码的jpeg图jpeg_start_decompress(&cinfo);…//开始解码JPOOL_IMAGE,row_width,1);buffer=(*cinfo.mem->alloc_sarray)((j_common_ptr,write_bmp_header(&cinfo,output_file);//获取解码后的…
//bmpRGB文件头数据
件逆序写入write_pixel_data(&cinfo,output_buffer,output_file);jpeg_finish_decompress(&cinfo);RGB数据
//bmp文5.2bmpjpeg_destroy_decompress(&cinfo);格式图片转换成jpeg格式jpeg_create_compress(&cinfo);jpeg_stdio_dest(&cinfo,outfile);////创建结构体加载输出jpeg
154
人工智能及识别技术第13卷第5期(2017年2月)
空文件
jpeg_set_defaults(&cinfo);jpeg_set_quality(&cinfo,quality,TRUE);//bmp数据逆行输出到…//设置压缩比设置默认参数//中间一步将的扫描数据写入,while(cinfo.next_scanline row_pointer[0]=&dst_data[(cinfo.image_height-格式数据,输出到outfile文件 cinfo. } jpeg_write_scanlines(&cinfo,row_pointer,1);jpeg_finish_compress(&cinfo);6结束语jpeg_destroy_compress(&cinfo); mjpg_streamer本文是基于ARM架构Cortex-A8处理器为硬件平台,或修改或开发,视频服务器和将 对mjpg_streamerlibjpeg进行插件模块扩充,库进行移植到开发板中。基于udp模式,使用C/S结构进行对远程监控图像数据进行处理并显示,同时基于libjpeg库也分析并实现了bmp与jpeg图片数据的软编码,更扩大了视频服务器的应用范围。 参考文献:[1]刘魏,唐健,袁芳.基于Mjpg_streamer[2]工科技宋成儒,.2016(3):基于Linux68-69.的视频监控研究[J]轻嵌入式的视频监控系统设计与应用[D].[3]昆明付爽:昆明理工大学,2013.[4]产品,.流媒体技术及其数字化应用的研究[J].中国新技术新[5]杭州电子科技大学王哲梁2009(19):.基于嵌入式53-54.王霏.基于视频的运动目标检测算法研究,2014.Linux的远程视频监控系统[D].杭州:[D].长春:吉林大[6]学刘豪,2014..基于Linux的MJPG-Streamer视频监控系统实现[7]科技视界邓志良,2015,32(15):54-55.[J].系统设计与实现,孙进,柯胜[J]..基于科学技术与工程ARM9的WEB,2012,远程视频实时监控12(21):5351-[8]5354.陈恒鑫系统设计,林威[J].,哈尔滨工业大学深圳研究院张钦宇.基于Mjpg-streamer的移动视频监控,[9]3597-3598.2014,11(12):张霄云南:山东大学.基于,ARM112013.的嵌入式linux系统移植与实现[D].济本栏目责任编辑:唐一东 因篇幅问题不能全部显示,请点此查看更多更全内容