基于ARM11的高清网络实时监控系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于ARM11的高清网络实时监控系统

刘伟杰;李博

【摘要】针对高清远程监控带来传输带宽增加的压力和时延、保存监控视频的周期短的问题,设计一种基于ARM11的高清网络实时监控系统.采用USB摄像头基于V4L2接口采集图像,结合H.265视频编解码技术,以RTP协议打包封装H.265视频码流经网络传输到Web服务器,利用CGI,JavaScript技术实现多种智能终端登录浏览器显示监控画面,在此基础上实现在LCD终端实时显示监控画面.经测试,该监控系统画面清晰无抖动,网络延时在500 ms以内,视频压缩比在130左右,满足高清视频监控数据的存储.

【期刊名称】《现代电子技术》

【年(卷),期】2018(041)012

【总页数】5页(P47-51)

【关键词】ARM11;V4L2接口;网络实时监控;RTP协议;Web服务器;LCD终端【作者】刘伟杰;李博

【作者单位】中北大学仪器科学与动态测试教育部重点实验室,山西太原030051;中北大学仪器科学与动态测试教育部重点实验室,山西太原030051

【正文语种】中文

【中图分类】TN949.197-3

随着安全性意识逐渐提高,安防监控在公共安全、交通安全和工业生产等各个方面

起到至关重要的作用,传统的本地模拟监控已经无法满足重要领域的大范围、远距离监控的需求,网络视频监控以其不受地区、时间限制,在授权的情况下可以随时按需监控,实现即插即用即看,使用方式相当便捷,已经成为监控发展的新趋势。目前网络监控高清已经成为主流,视频编码方面已经由应用广泛H.264标准发展

到最新H.265标准,H.265标准是继承H.264的架构并且采用了多种编码的新技术,相比H.264编解码技术H.265能够更好地支持高清视频;同样质量的图像,

H265比H.264有20%~40%的码流节省并且压缩视频占用空间是后者的1/3~

1/2,而且增加了更多的并行机制和网络传输机制,为高清视频实时传输和实时浏览提供便捷。

伴随着网络监控系统的到来,对监控系统的要求也不断提高,要求实时可靠、经济实用、方便灵活。而嵌入式系统的特点恰好满足以上要求,嵌入式网络监控系统应运而生。本文在嵌入式系统中移植Web boa服务器,搭建网络监控系统应用平台,应用H.265编码技术和RTP网络协议实现视频的采集、编码、发送和实时显示功能。

1 系统设计与实现

1.1 硬件系统设计

本文采用飞凌公司推出的OK6410开发板作为实时视频监控终端。OK6410开发

板是以三星公司生产的S3C6410微处理器,ARM1176JZF-S为内核,主频533 MHz/667 MHz,具有64/32位的内部总线,由AXI/AHB/APB总线构成,集成

了好多硬件加速器,非常适合音/视频、2D图形、显示运算等运用[1]。S3C6410

具有优化的外部存储器接口,256 MB的NOR FLASH,保证程序快速运行,2

GB的NAND FLASH用于启动代码、内核代码、根文件系统和用户程序。开发板包含多种硬件外设,包括USB摄像头接口、24位真彩色LCD控制器、SD卡插座等。硬件系统设计结构图如图1所示。

图1 硬件系统设计结构图Fig.1 Design structure of hardware system

1.2 软件系统设计

OK6410从S3C6410为主控芯片,基于Linux-2.6.30操作系统,系统软件主要

是U-boot,zImage和根文件系统,配置内核相关驱动和网络协议,移植ARM

端X265和Web boa应用软件。应用软件部分采用多线程编程,包括视频采集线程、LCD终端显示线程、视频压缩存储线程、网络传输线程。应用软件结构框图

如图2所示。

图2 软件系统设计结构图Fig.2 Design structure of software system

1.2.1 图像采集线程

V4L2[2]是Linux内核中关于视频设备的驱动模块,它为针对视频设备的应用程序提供了一系列的API[3]。V4L2的驱动程序调用流程如图3所示。

在Linux中,视频设备是设备文件,可以像访问普通文件对其进行读/写,驱动程

序在/dev/video*目录下,关键代码部分如下[4]。

1)打开摄像头设备,调用函数fd=open("/dev/vid-eo0",O_RDWR)第一个

参数是视频设备在/dev/目录下的设备名,视频设备以非阻塞方式打开。

2)检查视频设备支持的标准,调用ioctl(fd,VIDI-OC_QUERYSTD,&std)检测到的视频设备支持属性保存到std结构中[5]。

图3 V4L2的驱动程序调用流程Fig.3 Call flow for drive program of V4L2

3)设置视频采集格式,调用函数 ioctl(fd,VIDI-OC_S_FMT,&fmt)设置视

频采集分辨率、颜色、采集模式等。

4)申请帧缓冲空间,本文申请4个视频帧缓冲空间用于队列循环采集,这些视频数据保存到内核空间,应用程序不能直接访问内核空间数据。本文采用mmap()方式将内核空间映射到用户空间,内存映射方式方便快捷,省去了大量内存复制,

提高了效率。

5)设备采集图像,调用函数 ioctl(fd,VIDI-OC_STREAMON,&mtd)缓存图像。

6)关闭视频设备close(fd),释放内存。

1.2.2 LCD终端显示线程

LCD图像实时显示主要利用Linux系统提供的Fr-amebuffer(帧缓冲)直接写屏实现[5]。Framebuffer是Linux系统为显示设备提供的一个接口,其是一种独立于硬件的抽象图像设备,用户只需要通过应用程序直接读写Framebuffer的内容直接在显存上绘制图像。图像采集在LCD终端显示流程如图4所示。

1)打开显示设备终端,调用函数 fbfd=open("/dev/fb0",O_RDWR),调用ioctl(fbfd,FBIOGET_FSCREEN-INFO,&finfo)操作获得LCD显示设备相关参数,如屏幕分辨率,像素点比特数和偏移。根据屏幕参数设置屏幕换成屏幕缓冲区大小:screen_size=var.xres*var.yres*var.bits_per_pixel/8;调用mmap()函数将屏幕缓冲区空间印射到用户空间,显示设备初始化完成。

图4 图像采集在LCD终端显示流程Fig.4 Display process of image acquisition on LCD terminal

2)摄像头采集视频,从视频帧缓冲输出队列得到图像数据,摄像头采集模式YUV 格式需要转化为RGB格式,针对处理后的数据的分辨率判断与LCD分辨率是否匹配,进行图像缩放并送入显存显示,再将视频缓冲区送入队列,关键代码如下:

1.2.3 视频压缩存储线程

该系统的视频压缩编码标准选择的是新一代视频压缩编码标准:H.265/HEVC,其是一种高性能的视频压缩编码技术。与其他现有的视频编码标准相比,在相同的带

相关文档
最新文档