基于Linux嵌入式网络摄像机的设计

更新时间:2024-02-04 作者:用户投稿原创标记本站原创 点赞:18455 浏览:81678

【摘 要】本系统开发了一款基于Linux嵌入式网络摄像机的无线视频监控系统.采用C/S(客户端/怎么写作器)架构方案,以S3C2440A微处理器为核心的硬件平台,构建Linux操作系统,利用USB二合一数字摄像头和嵌入式Linux下提供的V4L2 API接口进行视频数据采集,把采集的视频图像数据通过MJPEG软件算法压缩后,再把视频数据通过内部总线送到mjpg-streamer视频怎么写作器里面,通过TCP/IP网络协议,在ARM怎么写作器上构建wifi AP功能无线局域网来实现把视频数据通过无线wifi传输到客户端,最后通过PC机上的QT客户端来实现把压缩后视频数据解码、显示、录制、回放视频,同时在手机安卓客户端那边实现实时远程监控、抓拍、保存图片.测试的结果表明,本视频监控界面非常的流畅、实时性高、没有卡顿的现象、图像的质量较好.

【关 键 词 】ARM;V4L2;mjpg-streamer;TCP/IP;WIFI;QT

近年来,计算机网络、图像处理、视频图像压缩技术的不断进步,视频系统已经越来越广泛应用于政府、军队、学校、银行和家庭等场合,并呈现多样化的发展趋势,并且同时具有数字化、网络化、实时性强等特性[1].在监控领域中,嵌入式网络视频监控以小巧、携带方便、低成本和高性能等特点占据优势.本文利用的是Inte网络技术、视频数据处理技术来设计基于Linux嵌入式网络摄像机无线监控系统,实现了一个独立嵌入式智能终端设备与后台PC机上的QT客户端(或手机安卓客户端)采用无线WiFi进行视频数据的传输;前台作为视频怎么写作器,进行视频数据采集,把采集到的视频数据通过MJPEG软件算法压缩后,再把压缩后的视频数据通过内部总线送到mjpg-streamer视频怎么写作器里面,并通过TCP/IP协议的Inte网络无线wifi AP功能,把怎么写作器压缩后的视频数据发送给pc机上的QT客户端进行数据解码、显示和录制视频.

1.Linux网络摄像机系统框图和原理

Linux网络摄像机系统结构图如图1所示:

图1 基于Linux网络摄像机系统结构图

Linux网络摄像机的原理:本系统硬件部分主要由S3C2440A微处理器、二合一USB数字摄像头、USB 无线WiFi网卡构成的.三星公司的S3C2440A芯片是16/32位的RISC 嵌入式微处理器,内核为ARM920T的主控芯片,常用时钟频率是400MHz,最大时钟频率为533MHz,对Linux 操作系统有很强的支持性, 有很强大的计算处理能力, 能够更好地实现视频图像数据的编解码[2];摄像头采用的是USB二合一的数字摄像头,主要是由OV7740CMOS图像感光的芯片、DSP数字信号处理芯片、USB设备控制接口这三个模块组成的,通过它可以把采集到视频图像数据传输到DSP数字信号处理芯片中进行加工处理,把它们压缩成MJPEG格式视频流数据,最后通过usb接口送到已经构建好的Linux操作系统、嵌入式mjpg-streamer视频怎么写作功能S3C2440A微处理器中进行处理;然后在ARM怎么写作器上构建一个无线WIFI AP功能的网络,将USB无线wifi网卡插入到开发板的USB接口上,启动AP网络功能,建立无线局域网,运行怎么写作器端的mjpg-streamer应用程序,把采集压缩后的视频数据通过wifi网络使用基于TCP/IP 协议的socket 发送视频数据传输到远程的PC机人机界面终端上Qt客户端和手机安卓客户端,实现对采集压缩后视频数据进行传输、保存、回放、抓拍图片、实时监控.


2.Linux网络摄像机系统设计与实现

2.1 嵌入式Linux 操作系统的构建

主要内容包括uboot的移植、Linux 3.4.2 内核的移植以及根文件系统的制作.

(1)uboot的移植

Bootloader目的是正确引导操作系统,通过里面的一段小程序,可以把板子硬件初始化和建立一个内存空间映射,从而把整个软硬件系统带到合适的环境中,为最后引导和加载内核做准备[3].

uboot 的目的就是为了启动内核,目前新版本的uboot能够支持多种系统架构的CPU,支持的开发板也越来越多,为了能使uboot更好的支持ARM9硬件平台上,还要进行如下两方面的工作:

① 增加下载功能,通过网络端口、串行端口或USB端口下载文件到内存中.

② 新版本的u-boot对flash芯片的读写支持比较完善,移植时主要增加的内容是对nandflash芯片的读写功能.

(2)Linux内核的制作

① 进入Linux-3.4.2源码目录,修改里面中的Makefile、内核的机器码及分区信息等等.

② 使用make menuconfig命令来写作Linux内核常用的功能并且配置它们.

③ 使用make uImage来编译内核,并生成一个压缩的uImage内核映象文件.

④ 通过nfs把新的内核映象文件下载到ARM开发板里面.

(3)根文件系统的制作

利用busybox源码包来制作根文件系统,制作的步骤如下:

① 修改busybox目录里面的Makefile文件,使用make menuconfig配置所需要的功能.

② 使用make编译BusyBox里面的功能,然后使用命令make install安装到相应根文件系统目录下.

③ 在根文件系统下构建其他目录,把编译出来的库文件拷贝到相应的目录下,并创建Linux系统启动常用的脚本文件.

④ 用nfs网络来挂载构建的跟文件系统,让开发板通过网络nfs从这个最小的文件系统启动.

2.2 USB摄像头驱动的修改和配置 本系统采用的是USB二合一数字摄像头,驱动是简单修改Linux内核自带的uvc_video视频驱动源码,把修改过视频驱动编译进内核,配置内核让内核支持UVC摄像头驱动和USB总线驱动,然后就可以通过V4L2应用程序接口来采集视频图像数据,把摄像头给用起来.

2.3 USB无线网卡源码包修改、驱动加载及wifi AP功能启动

本次系统使用的USB无线wifi网卡是RT3070,先从网络上下载驱动源码包2010_0203_RT3070_SoftAP_v2.4.0.1_DPA.bz2,解压驱动源码包,修改里面所有的Makefile和config.mk文件往里面增加自己的配置、内核路径以及交叉编译工具,配置编译内核支持无线wifi网络功能,重新编译刚刚修改过的驱动源码包,把生成的驱动模块拷贝到根文件系统相应的目录下并且加载它,并编写wifi加密应用程序,最后启动无线wifi网络的AP功能.

2.4 视频数据的采集

在linux系统中采用V4L2来表示视频设备接口,可以通过它来实现操作摄像头,就能实现采集远程图片、视频、音频等数据.尤其是在远程监控、3G、网络视频监控系统和嵌入式网络多媒体终端中都有广泛的应用[4].主要使用内存映射方式来对视频数据进行采集,采集视频流程图如图2所示.

图 2 视频数据采集流程图

2.5 格式转换及压缩的实现

通过V4L2采集到的视频数据是YUV的格式,并不能直接通过网络发送给客户端显示,需要通过press_yuyv_to_jpeg函数进行图像格式、文件格式等转换后才能通过网络传送给客户端显示,为了提高网络的传输效率、减少码流通常还需要采用MJPEG软件算法视频图像压缩,这样做的好处是让QT客户端和安卓客户端能够同时观看到更加流畅的视频画面.

2.6 网络视频怎么写作器与视频传输的实现

要实现把压缩后的视频数据通过网络传输,先采用C/S(Client/Server)方案,在ARM开发板上构建Mjpeg-streamer视频怎么写作器,在PC机终端上编写QT客户端和手机安卓客户端,mjpg-streamer视频怎么写作器的主函数处理流程如图3所示.

图3 主函数处理流程

图4 怎么写作器与客户端网络通信图

然后把压缩后的视频数据通过前面构建802.11b标准usb无线wifi信号,来进行视频数据的传输,使用网络协议是TCP/ IP 协议,为了能通过网络在不同的平台上实现不用进程之间的进行通信,本次使用Socket套接字编程接口来实现ARM怎么写作器跟客户端网络进行相互通信的,网络通信的流程图如图4所示.

2.7 QT客户端和手机安卓客户端功能实现

从ARM视频怎么写作器那边通过wifi信号接收的视频图像是压缩的MJPEG 格式,QT客户端要采用xvid_decore(dec_handle,XVID_DEC_DECODE,&xvid_dec_frame,vid_dec_stats)函数来实现把接收到的视频数据解码还原为YUV格式,然后通过cvWriteFrame(videowr,img)函数来实现把实时监控的画面录制成为I视频格式,以实现回放实时监控画面.而手机Android客户端可以实现远程实时监控、抓拍视频数据图像、保存视频图像,QT客户端[5]接收网络视频结构框图如图5所示:

图5 QT客户端接收网络视频框图

录制视频的整体程序流程图如图6所示.

3.结语

本设计主要介绍了如何采用C/S模式的方案,利用Linux + ARM+ WiFi + QT技术来实现嵌入式网络摄像机无线监控,实现对采集视频数据的进行网络传输、保存、回放、抓拍图片、实时监控.经测试,系统能够很稳定的运行,可以以15帧每秒(最快可达到25帧每秒)速度来采集图像,图像的分辨率为320 * 240,基本上很流畅的达到普通视频监控的效果,实现了一个小巧、方便携带、低成本、高性能的网络摄像机,来达到无线视频监控效果.

图6 总体程序流程图