您的位置首页>硬件>

基于Android的MJPEG网络摄像机设计

导读大家好,我是极客范的本期栏目编辑小友,现在为大家讲解基于Android的MJPEG网络摄像机设计问题。本文对MJPEG视频压缩算法进行了深入研究,

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解基于Android的MJPEG网络摄像机设计问题。

本文对MJPEG视频压缩算法进行了深入研究,描述了算法的实现过程,设计了基于安卓操作系统的3G手机网络摄像头客户端软件。该系统通过现场安装和测试,达到了预期效果,突破了传统网络摄像头客户端在固定区域的限制,具有良好的应用前景。

1系统硬件组成和网络架构

相机硬件核心采用三星推出的基于ARM9架构的S3C2440A芯片。处理器主频达到400 MHz,可以满足实时压缩,MJPEG视频流可以达到320倍。20分辨率和25 fps的性能要求。采用外设64 MB SDRAM和256 MBNAND Flash,网络功能由DM9000以太网MAC控制芯片负责,摄像头模块由USB控制器控制,系统电源由3个LM71117芯片组成,分别输出3.3 V、1.8 V和1.25 V电压,辅助外设接口构成摄像头硬件结构。S3C2440A系统的硬件框图如图1所示。

网络摄像头是互联网上的一个TCP/IP设备,系统网络拓扑图如图2所示。在家庭区域,根据安防的特点,在门廊、客厅、阳台区域分别设置摄像头,然后通过网线连接路由器,配置路由器参数映射每个摄像头的独立端口和IP地址,即完成上网。远端由固定PC、移动3G笔记本和便携式3G安卓手机组成。PC可以通过网络浏览器访问和控制网络摄像头,安卓手机可以通过客户端实时访问。

2系统软件设计

2.1网络摄像机软件设计

相机需要Linux系统环境。首先移植Bootloader,裁剪Linux 2.6.32内核,加载Linux UVC(USB视频设备类)驱动及相关驱动,将编译好的Linux系统镜像刻录到ARM板上的Nand Flash。无需为引导加载程序设置引导地址,即可构建软件操作环境。

要分析网络摄像机的性能要求和可扩展性,必须满足以下条件:

实时视频监控;

支持多个客户端同时连接;

图像识别算法或预留接口;

功能模块化满足后期开发和可扩展性的要求。

因此,采用多线程架构和互斥机制,保证代码结构的实时性和模块化设计。主要程序流程如图3所示。

主要功能如下。

初始化Linux V4L2接口,必须按照V4L2标准结构初始化结构,包括struct v412 _ capability capstruct v412 _ format fmtstruct v 412 _ buf缓冲区;struct v412 _ requestbuffers rbstruct v412_streamparm setfps .此外,视频设备名称、视频宽度、视频高度、帧速率、视频格式和捕获方法被传递给函数init_videoIn(struct vdIn*vd,char*device,int width,in think,int fps,int format,int grabmethod)进行初始化。值得注意的是,许多USB摄像头不支持JPEG格式视频流的直接捕获,但对YUYV格式的捕获有广泛的支持。在后期的图像识别算法运算中直接分析YUYV的原始图像数据,会节省大量将JPEG压缩数据转换为原始图像数据的运算成本,因此采用了YUYV的捕获方式。

创建核心图像处理线程。在这个线程中,实现了抓取功能。

UVC设备捕捉单帧,uvcGrab(struct vdIn*vd)功能将单帧YUYV格式的原始图像复制到内存中,并以高效的mmap内存映射方式读取;

JPEG核心算法的实现,JPEG压缩算法占用大量的CPU时间,这将在下一节详细讨论。

创建套接字接口。为了实现多个用户同时连接到网络摄像头,必须采用socket服务线程,每当有新用户连接时,就会同时生成一个新的线程,从而实现多个用户的同步监控。

建立基于Web浏览器访问方式的Web主页。嵌入式设备资源有限,轻量级Web Server主要有:Boa、Httpd、Thttpd等。在本设计中,使用开源的boa和交叉编译的Boa源代码来配置boa.conf文件,并使用system etc自启动shell来加入Boa程序,将HTML页面文件放入中对应的www目录后即可正常工作

本文对MJPEG视频压缩算法进行了深入研究,描述了算法的实现过程,设计了基于安卓操作系统的3G手机网络摄像头客户端软件。该系统通过现场安装和测试,达到了预期效果,突破了传统网络摄像头客户端在固定区域的限制,具有良好的应用前景。

1系统硬件组成和网络架构

相机硬件核心采用三星推出的基于ARM9架构的S3C24。

40A芯片,该处理器主频达到400 MHz可以满足实时压缩,MJPEG视频流可以达到320&TImes;240分辨率25 fps的性能要求。外围搭配64 MB SDRAM、256 MBNAND Flash,网络功能由DM9000以太网MAC控制芯片负责,摄像头模块由USB控制器控制,系统供电由3片LM71117组成,分别输出3.3 V、1.8 V、1.25 V电压,辅助外围接口构成摄像机硬件结构。S3C2440A系统硬件框图如图1所示。

  

  网络摄像机是互联网上的TCP/IP设备,系统网络拓扑图如图2所示。其中在家庭区域内根据安防的特点在大门走廊、客厅内、阳台区域分别布置摄像机,再由网线连接到路由器,配置路由器参数映射每个摄像机独立端口与IP地址,即完成Internet接入。远端由固定位置的PC机,移动位置的3G笔记本和随身携带的3G Android手机组成,PC机可以通过WEB浏览器访问与控制网络摄像机,Android手机通过客户端实现实时访问。

  

  2 系统软件设计

  2.1 网络摄像机软件设计

  搭建摄像机需要Linux系统环境,首先移植Bootloader,对Linux 2.6.32内核进行裁剪,加载Linux UVC(USB video device class)驱动及相关驱动,将编译好的Linux系统镜像烧写到ARM板Nand Flash中,对Bootloader没置启动引导地址,即完成软件运行环境搭建。

  分析网络摄像机性能需求与拓展性,须满足下列条件:

  ◆视频监控实时性;

  ◆支持多客户端同时连接;

  ◆图像识别算法或预留接口;

  ◆功能模块化满足后期开发可扩展。

  因此,采用多线程架构与互斥锁机制来保证实时性、模块化的思想设计代码结构。软件程序主流程如图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 grabmethod)实现初始化。值得注意的是众多USB camera并不支持JPEG格式视频流直接抓取,针对YUYV格式抓取却有广泛支持。后期进行图像识别算法操作时直接分析YUYV原始图像数据,将节省JPEG压缩数据转换为原始图像数据的大量运算开销,因此采用YUYV抓取模式。

  ②创建核心图像处理线程。在该线程内实现:抓取功能。

  ◆UVC设备单帧抓取,uvcGrab(struct vdIn*vd)函数实现单帧YUYV格式的原始图像拷贝到内存,采用高效的mmap内存映射方法读取;

  ◆JPEG核心算法实现,JPEG压缩算法占用大量CPU时间,下一小节将详细讨论。

  ③创建套接字接口。为实现多用户同时连接网络摄像机,必须采用socket服务线程,每当有新用户连接同时产生一个新线程与之对应,实现多用户端同步监控。

  ④搭建基于Web浏览器访问方式的Web主页。嵌入式设备资源有限,轻量级的Web Server主要有:Boa、Httpd、Thttpd等。本设计选用开源的Boa、交叉编译Boa源码配置boa.conf文件,配置系统etc自启动shell加入Boa程序,将编写HTML页面文件放入系统中对应的www目录后即可正常工作。

   技术专区 泰克支持亚马逊(AWS)媒体服务,为端到端视频提供质量保证Imec即将震撼展示首款短波红外(SWIR)波段高光谱成像相机4K超高清家庭影院投影机带来的高清体验,共襄盛举基于统一计算架构技术的视频显示系统设计Apple TV 4K拆解报告:熟悉的模块化组件

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。