基于S3C6410的无线视频监控系统设计
Mjpg—streamer是一个视频流应用软件,使用V4L2(Video4 Linux 2)的接口,通过文件或HTTP方式访问linux—UVC兼容摄像头。视频采集功能通过调用mmap()函数将视频采集设备映射到系统内存中来实现,取代了传统的直接读取用户空间设备的方式,绕过了内核缓冲区,加快了视频数据的处理速度,提高了实时性。
Mjpg—streamer支持使用摄像头内的DSP硬件压缩功能付出少量硬件压缩时的电源开销,减少了CPU的负荷,减少带宽的占用,特别适用于嵌入式设备。
MJpg—streamer采用模块化的设计方法,以功能块,即plug—in(组件)为单位进行描述。Mjpg—streamer的工作就是将其中的一个输入组件和多个输出组件绑定在一起,所有的功能都是通过它的各个组件完成的。用户可以选择需要的模块,并进行必要修改,以完成所需功能。体系结构如图2所示。

插件最主要且最常用的组件是input—uvc输入组件和output—http输出组件。其他组件包括input—control、input_file、input_test picture、input_gspcavl、output_autofocus、output_file、out_viewer,如图3所示。
2.2. 1 input_uvc输入组件
Input_uvc组件的主要功能是获取摄像头拍摄的图像并将其压缩编码,共包括5个组件接口函数,这些组件接口函数是各个组件提供给外部使用的接口。相关函数的定义可查看input_uvc.c文件。
Output_http输出插件是功能齐全的HTTP 1.0的web服务器,通过输入插件获取的USB摄像头图像数据处理之后以流媒体的形式输出,并可为设置用户名和密码,最终在其客户端浏览器显示。
2.2.2 mjpg—streamer视频服务器的移植
Mjpg—streamer的移植需要JPEG库的支持,所以首先需要移植JPEG库到开发板。从http://www.ijg.org/files/下载jpeg源码包,解压缩后进入其目录,在源码包目录执行./configureCC=arm-linux-gec-host=arm-unknown-linux-prefix=/opt/linux/jpeg-enable-shared-enable-static命令配置其交叉编译器和编译后安装的目录,然后执行make命令编译和makeinstall命令安装,最后将jpeg目录下生成的库文件libjpeg.so.9拷贝到开发板根目录下的lib文件夹中,即完成jpeg库的移植。
通过sourceforge网站下载mjpg-streamer源码包。修改input_uvc目录下的Makefile文件,以其满足编译要求。然后执行make CC=arm-linux-gcc命令进行编译。在开发板建立mjpg安装目录,将其源码目录中的.so为后缀的共享库文件和start.sh文件及文件夹WWW拷贝到其中,同时复制编译后目标文件路径下的可执行文件mjpg_streamer到开发板根目录的bin文件夹中,至此整个移植过程完毕。最后执行./ mjpg_streamer-i“mjpg/input_uvc.so-y-d/dev/video2”-o“/mjpg/output_http.so-w/mjpg/www”命令以开启视频服务器。
3 系统测试及性能分析
本文采用飞凌公司的ARM11开发板进行实验,通过烧写并运行应用程序,可在远程PC机上看到视频监控效果。在浏览器端输入服务器端的IP地址访问目标服务器,即输入http://10.17.133.88:8080/?action=stream,视频监控效果如图4所示。从监控画面可以看出,接收到的监控画面比较清晰,反映出通过Mjpg-streamer服务器进行无线传输的图像画面质量较好,达到了无线传输的功能。

通过表1中两种方法进行稳定性测试,从测试效果可以看出,在浏览器端显示的图像信息良好,系统不管在何种情况下,均没有出现死机或卡顿的现象,说明设计的监控系统性能稳定。

4 结束语
本文设计了一种基于ARM11、USB摄像头、WIFI以及Mjpg-streamer软件的嵌入式视频监控系统,进行了linux系统及视频服务器软件的编译与移植,实现了视频流在基于802.11g的远程视频的实时稳定传输。该系统体积小,功耗低,经测试,系统稳定可行,实时性好,可被多用户同时访问,远端计算机可以清晰地观测到室内监控画面。该系统满足室内视频监控的需求,为进一步提高视频图像传输质量和传输效率,可以考虑加入最新H.264编解码算法进行视频图像的编解码。
评论