深入研究了MJPEG视频压缩算法,解释了算法的实现过程,并设计了基于Android操作系统的3G手机网络摄像机客户端软件。该系统通过现场安装和测试,达到了预期的效果,突破了传统网络摄像机客户端固定的地域限制,具有良好的应用前景。 1系统硬件组成和网络架构摄像机硬件核心采用基于三星公司发布的ARM9架构的S3C2440A芯片。处理器的主频率达到400 MHz,可以满足实时压缩的要求,而MJPEG视频流在25 fps的条件下可以达到320& TImes; 240分辨率的性能要求。 。外设配备64 MB SDRAM,256 MB NAND闪存,网络功能负责DM9000以太网MAC控制芯片,摄像头模块由USB控制器控制,系统电源分别由三个LM71117组成。输出3.3 V,1.8 V,1.25 V辅助电压外围接口构成摄像机的硬件结构。 S3C2440A系统硬件框图如图1所示。网络摄像机是Internet上的TCP / IP设备。系统网络拓扑如图2所示。在家庭区域中,根据安全特性,将摄像机布置在门廊,客厅和阳台区域,然后通过网络电缆将路由器连接到路由器,并且路由器配置参数以映射每个摄像机的独立端口和IP地址以完成Internet访问。远端由固定位置的PC,移动位置的3G笔记本电脑和随身携带的3G Android手机组成。 PC可以通过WEB浏览器访问和控制网络摄像机,而Android手机可以通过客户端实现实时访问。 & nbsp; 2系统软件设计2.1网络摄像机软件设计要构建需要Linux系统环境的摄像机,请首先移植Bootloader,裁剪Linux 2.6.32内核,加载Linux UVC(USB视频设备类)驱动程序和相关驱动程序,然后编译Linux系统映像已编程到ARM板的Nand Flash中,并且引导加载程序未设置为开始引导地址,即已构建了软件运行环境。分析网络摄像机的性能要求和可扩展性,必须满足以下条件:◆实时视频监控; ◆支持多个客户端同时连接; ◆图像识别算法或预留接口; ◆功能模块化,可满足后期开发和扩展需求。因此,使用多线程体系结构和互斥锁定机制可以确保实时,模块化的设计代码结构。软件程序的主要流程如图3所示。主要功能如下。 ①要初始化Linux V4L2接口,必须根据V4L2标准结构(包括struct v412_capability cap)进行初始化。 struct v412_format fmt; struct v412_buffer buf; struct v412_requestbuffers rb; struct v412_streamparm setfps。另外,将视频设备名称,视频宽度,视频高度,帧速率,视频格式和捕获方法传递给函数init_videoIn(struct vdIn * vd,char * device,int width,intheight,int fps,int format,int catchmethod )以实现初始化。值得注意的是,许多USB摄像机不支持JPEG格式视频流的直接捕获,但是对YUYV格式捕获具有广泛的支持。以后,在进行图像识别算法运算时,直接分析YUYV原始图像数据,在将JPEG压缩数据转换成原始图像数据时将节省大量的计算开销,因此采用YUYV捕获方式。 ②创建核心图像处理线程。在此线程中实现:抓取功能。 ◆UVC设备单帧捕获,uvcGrab(struct vdIn * vd)功能实现了将单帧YUYV格式的原始图像复制到内存中,使用高效的mmap内存映射方法进行读取; ◆JPEG核心算法的实现,JPEG压缩算法占用大量CPU时间,下一节将详细讨论。 ③创建一个套接字接口。为了实现多个用户同时连接到网络摄像机,必须使用套接字服务线程。每当有新用户连接时,都会产生一个与之对应的新线程,从而实现对多个用户的同时监控。 ④根据网页浏览器的访问方法,建立网页首页。嵌入式设备资源有限。轻量级Web服务器主要包括:Boa,Httpd,Thttpd等。此设计选择开源Boa,交叉编译Boa源代码以配置boa.conf。