摘要:将嵌入式Linux和无线网络引入到视频监控系统,阐述了系统的硬件组成;介绍了USB无线网卡驱动实现的过程;从嵌入式Linux开发环境的搭建、嵌入式流媒体服务器的设计和动态网页的设计等方面介绍了软件系统的具体实现过程;对动态网页设计所涉及到的双缓冲技术进行了详细介绍。实现结果表明,该系统具有可靠性高、体积小、成本低和使用便利等特点,适用于移动视频监控等实际场合。
关键词:嵌入式Linux;USB无线网卡;流媒体服务器;双缓冲;移动视频监控
0 引 言
传统的视频监控系统一般采用PC服务器的C/S(Client/Server)结构,视频服务器由计算主机和许多存放视频的磁盘陈列组成,专门用于视频的存储和传输。流式传输采用的是边接收边播放的原则,这需要将多媒体的编、解码和传输技术很好地结合在一起。目前多媒体的编解码技术如MPEG-4,H.264等,可以以较小的带宽开销来实现较高质量的视频传输,然而目前的传输技术却无法满足移动视频监控的需求,因为设备的移动速度和所在位置都会严重影响到传输。传统流媒体系统体积大、成本高、可靠性低且移植性差,不能满足这种特殊场合的应用要求。
针对传统监控技术的不足,本文提出了基于ARM的移动观频监控的设计与实现,设计了一种专门功能、结构简单的流媒体服务器;采用Boa作为Web服务器,并通过浏览器来监控,实现跨平台监视;采用双缓冲技术,确保用户能够得到较好、较稳定的播放质量;利用USB无线网卡实现无线上网,免去布线的烦恼,方便地实现了移动视频监控的功能。
1 系统硬件设计
硬件平台是整个系统运作的基础。本系统主要由流媒体服务单元、USB无线网卡、无线路由、摄像头和监控端组成。流媒体服务单元是整个系统的核心,主要由嵌入式Linux、嵌入式处理器和外围器件组成。
嵌入式处理器采用Intel XScale结构的PXA27嵌入式微处理器,最高主频可达624 MHz;加入wireless MMX技术,大大提升了多媒体处理能力;加入Intel SpeedStep动态管理电源技术,在保证CPU性能的情况下,最大限度地降底移动设备的功耗。在处理器丰富资源的基础上,本系统扩展了64 MB Nand FLASH,64 MB SDRAM,16 MB Nor FLASH,4个USB主接口以及一个从接口。USB一主接口接摄像头,用于采集视频数据;USB一主接口接无线网卡,用于发送视频数据。无线网卡采用了TCP/IP、NETBEUI传输协议,传输速率为11 Mb/s,5.5 Mb/s,2 Mb/s,1 Mb/s。其最大覆盖范围为35~100 m(室内)、100~300 m(室外),能较好地满足移动视频监控的要求。本系统硬件组成图如图1所示。
以PXA270为核心接收摄像头采集到的视频数据,经过编码后通过无线网卡发送,再经由无线路由接入以太网,用户通过Internet接收到视频信息。
2 USB无线网卡驱动
在Linux系统中,提供了主机侧和设备侧视角的USB驱动框架。从主机侧角度而言,需要编写的USB驱动程序包括主机控制器驱动和设备驱动两大类。主机控制器驱动程序属于USB驱动程序的核心,这部分在Linux内核源码中已经有很好的支持。本节将重点介绍USB无线网卡设备驱动的实现。
2.1 USB驱动的注册和注销
usb_ids描述了这个USB驱动所支持的USB设备列表。
2.2 探测和断开函数
在编写USB无线网卡设备驱动时,很重要的一步是probe()和disconnect()函数,即探测和断开函数,它们分别在设备被插入和拔出的时候被调用,用于初始化和释放硬件资源。
2.3 USB请求块(URB)
USB无线网卡本身的驱动部分的读写等操作流程有其特殊性,即以USB请求块(URB)来贯穿始终。URB是USB主机与无线网卡设备通信的电波。
3 系统软件设计
基于ARM的移动视频监控的软件设计包括嵌入式Linux系统开发环境的搭建与移动视频监控软件设计两大部分。
3.1 基于ARM的嵌入式Linux开发平台
本方案采用了Linux嵌入式操作系统,以Linux2.6.24为基础进行裁减定制自己的内核,在编译内核时保留必须的文件系统、存储器、串口、USB、以太网驱动,将摄像头、USB无线网卡驱动以模块的形式编译,以减少编译后内核的大小。Bootloader采用blob,烧写blob后利用tftp协议实现Linux内核和文件系统在Flash上的烧写。在Redhat 9安装Arm-linux-gcc。建立交叉编译环境,实现流媒体服务器和Boa在PAX270上的搭建。鉴于现在烧写技术已经很成熟,故不详细讨论。
3.2 移动视频监控软件的设计
移动视频监控软件完成的主要功能有:设计流媒体服务器采集并传输摄像头拍摄的视频信息;构建嵌入式Web服务器Boa;动态网页的设计以及流媒体服务器、web服务器与浏览器之间的通信等任务。因此系统软件框架如图2所示。
3.2.1 流媒体服务器的设计
流媒体服务器主程序用于开放某个视频服务器端口,并不断监听端口,如有连接请求则建立连接,建立后流媒体服务进程将不断向端口提供采集到的视频数据流同时也接收客户端发送过来的视频调节命令参数。流媒体服务器主程序流程图如图3所示。
(1)采集视频数据
系统是在嵌入式Linux系统平台上采用Video4Linux编程来采集视频的。一般摄像头是直接读视频设备,采集到视频数据并存在文件中。对文件进行操作,这样程序运行效率会很低。本系统摒弃这种方法,采用mmap(内存映射)方式截取视频数据。mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。
(2)传输视频数据
本系统通过网络传输视频数据,用套接字(Socket)编程实现。
(3)采集线程与传输线程同步
流媒体服务器的设计有个关键点:保证连续不断的视频流。针对这一点,本系统采用多线程编程,采集和传输并行执行。用互斥量和标志位来实现采集线程和传输线程的同步。
采集数据时给互斥量加锁,直到当前帧采集完并填充完当前帧头结构体才解锁互斥量,再开始传输。同理,传输当前帧时采集线程等待,直到当前帧传输完。采集完两帧数据传输第二帧。传输完成后,采集完第三帧传输第三帧。依此循环,采集完第N帧传输第N帧。此时实际只传输了第2帧到第N帧,即N-1帧。
用户的视觉反应需要时间,此丢弃第一帧的设计思想并不会使画面失真。反而连续不断的视频流传输到客户端为用户能够获得良好的视频质量打下了基础。
采集线程:
3.2.2 动态网页的设计
嵌入式Web服务器是Web服务器简化后的专用系统。本系统选用适合嵌入式系统的Boa Web服务器。Boa是一个单任务的HTTP服务器,支持能够实现动态Web技术的Java Script技术,源代码开放,性能高。同时服务器本身所占空间很小,因而十分适用于嵌入式系统。
鉴于Boa移植技术已经很成熟,故不详细讨论。
Applet是能够嵌入到一个HTML页面中,且可通过Web浏览器下载和执行的一种Java类。它是Java技术容器(container)的一种特定类型。Applet可以通过网络传输,由浏览器自动装载并执行。这恰恰非常符合本系统的要求,因此选用Applet来很好地实现动态网页,打开网页就可以看到视频数据,方便快捷。
(1)设计流程
Applet不能单独运行,需要嵌入在网页中借助浏览器的解释。必须要创建一个HTML文件来告诉浏览器需装载什么以及如何运行它。其执行顺序如下:
①浏览器装入URL;
②浏览器装入HTML文档;
③浏览器装入Applet类;
④浏览器运行Applet。
本系统Java Applet实现三个功能:视频数据通过Socket传送到客户端显示;将客户端调节视频带参数发送到服务器;将客户端点击的运动控制参数发送到服务器。其中init和start函数在Applet开始执行时调用,通过start创建2个线程:用于socket通信;提供用户界面显示视频和相应用户操作。用户界面设计用到Sun的SwingWorker类库。
(2)双缓冲技术
双缓冲技术主要应用于屏幕闪烁现象的消除。在一帧图像的绘制过程中,如果一帧图像的绘制时间大于屏幕的刷新时间,就会造成视觉上不连贯的效果。绘制时可在内存中建立两个图形缓冲区,其中一个缓冲区(前台)用于存放显示的当前帧,并在屏幕上显示;同时在另一个缓冲区中完成下一帧的绘制。因为画面的绘制过程是在用户不可见的情况下进行,自然也就消除了这种闪烁现象。
为了保证用户的观看质量,本系统在动态网页的设计中引入这种双缓冲技术。采用Java语言中component类的一个可用于创建图形缓冲区的方法createImage(int width,int height),其参数为绘制区域的大小。该方法返回一个大小为绘制区域的Image对象。调用该对象的getGraphics()方法得到一个GraphiCS对象,将它视为后台的Graphics对象。此后,可调用Graplaics类的各种绘图方法,以绘制所需的画面。此时,所有的操作都是在后台的Image对象中进行的,并没有显示到屏幕上。当绘制完成后,再调用前台Graphics对象的drawlmage(Image img,int x,int y,ImageObserver observer)方法将已准备好的Image显示到屏幕上。其中Image参数就是createImage方法所返回后台的Image对象,ImageObserver参数是与前台Graphics对象相关的Component对象或其派生类对象。
4 系统测试
在PXA270上搭建Boa,将Java Applet小程序编译后生成的.class执行文件、HTML脚本index.html及相关文件拷贝到/var/www/下。将编译好的流媒体服务器的二进制文件下载到PXA270上。加载摄像头和USB无线网卡驱动,运行boa,再运行流媒体服务器。在PC端打开浏览器输入pxa270的IP地址,就可以看到网页监控的画面,画面清晰且视频流畅,如图4所示。
5 结 语
本文充分利用多媒体技术和嵌入式技术各自的特点,介绍了一种用ARM实现移动视频监控的方法,给出了软硬件设计结构及USB无线网卡驱动的具体实现过程。设计了流媒体服务器,搭建了Boa作为Web服务器及实现了动态网页。利用USB无线网卡免去了布线的烦恼;利用B/S结构使得可以通过浏览器来监控,实现跨平台监视;利用双缓冲技术,实现较高的视频质量。基于ARM的移动视频监控系统使得操作简单,携带方便,可靠性高,成本低,具有良好的开发及应用前景