基于ARM的移动视频监控系统
率会很低。本系统摒弃这种方法,采用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无线网卡驱动的具体实现过程。设计了流媒体服务器,
- 基于ARM的除法运算优化策略(01-14)
- 基于ARM的CAN总线智能节点的设计(01-24)
- ARM基础知识教程五 (02-08)
- ARM基础知识教程六(02-08)
- ARM基础知识教程七(02-08)
- ARM基础知识教程八(02-08)