APP下载

基于WiFi的嵌入式视频监控系统设计

2013-06-07周贤军

电视技术 2013年1期
关键词:解码无线网络客户端

卢 灵,周贤军

(暨南大学信息技术研究所,广东 广州 510075)

视频监控系统已经被广泛运用在楼宇监控、交通系统等日常生活中,给人们的生活带来便利和安全,随着人们安全意识的上升,普通居民住宅也大量的采用了视频监控设备,使得视频监控设备的市场前景越来越被看好。

目前,视频监控系统实现主要两种方案:PC机带视频采集设备方案和嵌入式方案。这两种方案各有优势,PC方案只需要在自家的PC机上安装相应的软件和USB视频采集卡就可以实现视频监控,嵌入式方案就是将整个系统使用嵌入式CPU来替代PC的工作。

本文针对视频监控系统提出了一种基于WiFi无线网络系统的嵌入式系统实现方案,该方案采用USB视频采集设备采集视频图像,视频图像通过S3C6410处理器集成的硬解码实现图像视频的压缩,然后通过WiFi无线网络传输视频图像到PC终端,由PC机上QT制作的监控软件实现视频图像数据的保存和播放。该设计的优点就是使用WiFi无线网络发送视频图像,使得视频监控系统更灵活,而且在PC机监控软件视频图像的处理和保存上采用了循环队列的形式处理,使得整个视频图像的网络接收和播放同时进行,从而大大提高整个系统的视频处理的效率。实验证明,所提出来的方案能够得到清晰、稳定、流畅的视频图像。

1 系统设计

如图1所示,整个视屏监控系统分为服务器和客户端两个模块来实现[1]。首先,服务器通过视频采集模块采集视频图像数据,然后将采集的视频图像数据帧进行JPEG图片压缩处理,最后通过WiFi无线网络传输模块发送到Internet网络,由客户端负责接收图片数据;其次,客户端一直通过网络接口接收服务器传输过来的图片数据,并将接收到的监控图片数据在客户端显示出来。

图1 视频监控系统的整体设计框图

1.1 视频图像的采集实现

视频图片的采集是视频监控系统主要模块,动态视频需要连续播放至少24帧渐变的图片。目前,视频监控领域中,视频信号一般为通过视频采集卡或外置USB视频摄像头采集模拟视频数据[2]。Linux 2.6以上内核提供了V4L2 API接口,USB采集的图片数据可以直接通过API函数采集和存储,V4L2 API接口在使用之前需要初始化,主要是设置视频图像的帧格式,有两个结构体用来定义视频图像帧格式:

其中fmt.type可以指定捕捉图像数据流类型,fmt.fmt.pix.width 指定图像的宽度 fmt.fmt.pix.height设置图像的高度,fmt.fmt.pix.pixelformat设置图像的存储格式,通过对这些参数的初始化,就可以初始化视频图像数据帧格式,从而为V4L2 API提供Linux操作系统处理图像数据的接口参数。整个图像数据在Linux操作系统下采集处理流程如图2所示。

图2 Linux操作系统下采集图片数据处理流程

如图2所示,图像数据采集是通过Linux操作系统来控制操作的,USB视频采集模块在Linux操作系统下被视为一个文件。首先,打开这个视频文件,然后设置图像信息与格式,就是初始化两个定义视频图像帧格式的结构体参数,在初始化视频图像信息与格式之后,再将存放图像信息的缓存映射到用户空间,也可以使用read操作函数将图像数据直接读到内存缓存buffer中,而内存映射方式可以使得内核与用户进程之间通过映射文件实现共享内存,可以减少系统调用函数开销,图像存储空间映射完成之后,用户就可以直接读取图像数据了,也即采集图像数据,这里设置了缓存中保存图片的张数上限MAX_NUM,用来控制视频图像每秒播放图像数据帧数量。Linux操作系统的V4L2 API接口函数通过ioctl来操作图像数据的采集,通过该函数将图像数据一帧一帧地读取到映射好的存储空间,首先,调用ioctl(fd,VIDIOC_QBUF,&buffer)初始化buffer,使得该buffer适合存储图像数据帧格式的图像数据,让图像缓存块进入采集队列,然后调用ioctl(fd,VIDIOC_QUERYBUF,&buffer)将相关信息会保存到buffer里,然后调用 yuyv[i]=(char*)mmap(0,buffer.length,PROT_READ|OT_WRITE,MAP_SHARED,fd,buffer.m.offset)可以将buffer中的数据映射到用户空间,其中i是图像在内存数据存储区的偏移量,这样图像数据就以YUV格式保存到了yuyv[i]数组中了,图像数据就读取到了用户空间了。

1.2 视频图像JPEG硬解码在S3C6410上的实现

由于S3C6410内部集成了JPEG硬编解码,解码速度快,图像损耗小。因此,这里采用S3C6410内部集成了JPEG硬编解码器对USB采集的YUV格式视频图像数据进行JPEG硬解码。解码时用到的1个重要结构体:

这个结构体控制了JPG解码的所有参数,其中,JPG解码格式可以选择JPG_444,JPG_422,JPG_420等格式,这里使用JPG_422,解码质量选择可以选择几个不同等级,质量高等级就相应的图片压缩比例小,图片相对损耗也小,图像解码宽度和高度设置对应解码出来JPG图像的大小比例,解码数据大小是指解码的YUV图片数据大小,可以使用sizeof(yuyv)计算。JPG硬解码处理流程图如图3所示。

图3 JPG硬解码处理流程图

首先,打开JPG硬解码设备,调用fd=open("/dev/s3c-jpg",O_RDWR),然后映射stream区域,作为JPG硬解码内核和用户共享的区域,调用dsp_buf=mmap(),同时获取该区域地址,调用frame_buf=(char*)ioctl(fd,IOCTL_JPG_GET_FRMBUF,dsp_buf),再打开YUV文件,读到内存中,接着将YUV读入内存中的数据复制到frame_buf所指的内存区域,最后调用write(jpg_fd,dsp_buf,param.fileSize)将YUV图片解码成JPG图片,在此之前,需要设置好JPG解码格式,即设置好控制JPG解码结构体的参数。

1.3 WiFi无线网络传输视频图像数据帧实现

UT_WiFi_C无线网卡模块接口为SDIO,该模块采用Marvell8686的单芯片解决方案,相关的驱动Marvell官方提供,WiFi无线网卡启动以后,联网过程和使用跟有线网络基本一样,也是使用网络套接字实现网络链接和数据网络传输[3]。WiFi传输视频图像数据流程图如图4所示。

图4 WiFi传输视频图像数据流程图

如图所示,WiFi传输是视频图像数据帧处理过程是一个应答过程。首先,由客户端发送读取视频图像帧头信息申请,服务器接收到客户端信息后,发送视频图像帧头信息过去,客户端在接收到帧头信息之后可以根据帧头信息设置和初始化保存视频图像帧的缓存区大小和对应的标志位信息,然后服务器开始发送视频图像真实的数据信息,客户端则负责接收和保存。

2 服务器视频图像的保存

服务器使用循环队列形式保存视频图像信息数据,具体实现如图5所示。

图5 服务器视频图像保存缓存存储格式图

图5就是服务器视频图像保存缓存存储格式图。首先,服务器申请一块能够存放MAX_NUM×N帧视频图像数据帧大小的内存buffer用来存放接收的视频图像数据帧,其中MAX_NUM用来控制每一秒钟至少播放的视频图像数据帧的帧数,而N是指buffer能够存放的这样数据帧块的数量。接收的视频图像数据帧不断的被存放到该buffer中,第一次要求填满该buffer,然后开始播放视频图像,每秒钟播放MAX_NUM帧视频图像,当播放到MAX_NUM×N/2帧时,这时开始发送消息,要求更新已经播放的视频图像数据,同时接着播放buffer中剩下没有播放的视频图像数据,当再次播放到MAX_NUM×N/2帧时,再次要求更新已经播放的视频图像数据,而之前要求更新的图像数据这时候已经更新完成了,可以继续播放,如此循环播放。由于视频更新使用的网络接收视频图像数据线程,而播放视频使用的是播放视频线程,二者并行运行,节约了整个服务器处理数据的时间,大大的提高了存储和播放的性能。

3 系统设计流程

视频监控设备流程图如图6所示[4]。

图6 视频监控系统流程图

首先,服务器和客户端初始化,并配置好相互连接的网络套接字,客户端通过有限连网,用来连接服务器WiFi无线网络;服务器在配置好网络之后,开始侦听客户端请求,如果客户端请求视频图像数据接收,服务器开始采集视频图像数据,由于视频图像播放必须在1 s里连续播放至少24帧图像数据才能够保证连续平滑的视觉效果,所以,需要设置一个视频数据帧采集控制标志位MAX_NUM,由它来控制视频帧的采集数;当视频数据帧采集完成时,即大于MAX_NUM时,开始JPEG视频图像硬解码,S3C6410内部集成了JPEG硬编解码,可以直接对USB采集的YUV格式视频图像进行JPG解码,比软件直接解码损耗低,而且速度快;视频图像解码之后,就可以开始发送视频图像数据了,发送视频数据帧使用了MAX_NUM×N/2这个标志位来控制,这主要是配合客户端视频图像数据帧循环缓存更新设置的,如果传输视频数据帧大于或等于MAX_NUM×N/2,就需要更新视频图像数据了,如果客户端重新请求更新图像数据,开始新的视频图像采集和发送。在客户端,在接收到视频图像数据帧之后,将数据保存在循环缓存区,这个缓存区里面可以存放MAX_NUM×N帧数据,第一次接收数据需要将这个缓存区填满视频图像数据帧,然后开始播放,每次播放完成MAX_NUM×N/2帧视频图像数据帧之后,向服务器发送更新已经播放的视频图像数据,然后接着播放还没有播放的MAX_NUM×N/2帧数据,这样循环请求和更新缓存区保存的视频图像数据帧,并循环播放缓存区视频图像数据,由于视频播放和网络接收视频图像数据是两个独立的线程可以并发执行,这样就使得视频的传输和播放同时在进行,在播放前一段视频图像时更新后一段视频图像,在播放后一段视频图像时更新前一段视屏图像,整个循环进行,大大提高了整个系统视频处理的效率。

4 系统仿真与测试

系统仿真测试分为服务器和客户端两个终端的仿真测试。图7是服务器终端仿真测试图,采用S3C6410开发板作为CPU控制整个服务器的运行,包含USB摄像头采集图像数据,图像视频数据帧的JPG硬解码和WiFi无线网络传输图片数据。图8是客户端视频监控画面,客户端的视频监控软件是基于QT平台的C++用户图形化界面开发工具开发的,其中,operation菜单键可以控制视频图像抓取和播放,setting负责设置软件的初始化参数信息。整个系统的测试结果证明,视频图像的显示和抓取流畅,画面效果清晰、平滑,说明整个设计稳定,数据处理高效。

5 结束语

针对视频监控系统,提出了一种基于WiFi无线网络嵌入式系统解决方案。该方案解决了USB视频图像采集问题,并通过S3C6410内部集成的JPG硬解码实现了视频图像的压缩处理,最后通过WiFi无线网络将视频图像发送到客户端,在客户端采用视频图像循环保存和显示,最终实现了视频图像清晰、稳定、平滑显示,整个设计正确、高效。

[1]张伟男,张溢华.基于无线传输的移动视频监控系统的设计[J].电视技术,2009,33(3):79-81.

[2]赵文敏,余文芳,邢建国.一种嵌入式网络视频监控系统的设计[J].计算机应用与软件,2009,26(8):67-69.

[3]熊平,刘刚,庄彩云,等.基于WiFi技术的嵌入式病房监护系统的设计[J].中国医学物理学杂志,2011,28(1):2447-2449.

[4]王小红,周渊平,方晓翠.嵌入式视频监控系统的设计和实现[J].通信技术,2011,44(6):105-109.

猜你喜欢

解码无线网络客户端
《解码万吨站》
滤波器对无线网络中干扰问题的作用探讨
解码eUCP2.0
如何看待传统媒体新闻客户端的“断舍离”?
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
无线网络的中间人攻击研究