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

最新更新时间:2012-07-23来源: 互联网关键字:Android  MJPEG  网络摄像机 手机看文章 扫描二维码
随时随地手机看文章

深入研究了MJPEG视频压缩算法,阐述了算法实现过程,并设计出基于Android操作系统的3G手机网络摄像机客户端软件。本系统通过实地安装与测试达到了预期效果,突破了传统网络摄像机客户端固定地域的限制,有良好的应用前景。

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

  摄像机硬件核心采用三星公司推出的基于ARM9架构的S3C2440A芯片,该处理器主频达到400 MHz可以满足实时压缩,MJPEG视频流可以达到320×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目录后即可正常工作。

2.2 MJPEG压缩算法研究与实现

  MJPEG(Motion Joint Photographic Experts Group)视频编码格式,把运动的视频序列作为连续的静止图像来处理,这种压缩方式单独完整地压缩每一帧,编辑过程中可随机存储每一帧,可进行精确到帧的编辑。MJPEG单帧压缩算法为JPEG(Joint Photographic Experts Group)。人眼视觉生理特性决定眼睛对构成图像的不同频率成分具有不同的敏感度。JPEG压缩是有损压缩,但损失的部分是人类视觉不容易察觉到的部分,利用眼睛对色彩域中的高频信息部分不敏感的特点,节省大量需要处理的数据信息。一帧原始图像数据对其进行JPEG算法编码过程分两大部分:

  ①空间冗余度,去除视觉上的多余信息;

  ②结构(静态)冗余度,去除数据本身的多余信息。

  JPEG编码中主要涉及包括:DCT、zigzag编码、量化、RLE编码、范式Huffman编码、DC(直流分量)的编码。JPEG编码流程如图4所示。

  

 

  DCT(Discrete Cosine Transform)变换,又称离散余弦变换是可逆的、离散的正交变换。它将原始图像色彩空问域转换为频谱域。由于相邻两点像素色彩很多是接近的,压缩这些不需要的数据必须利用图像信号的频谱特性。JPEG压缩原理的理论依据是图像信号频谱线大都分布在0~6 MHz范围内,而且一幅图像内大多数为低频频谱线,而高频的谱线只占图像比例很低的图像边缘或者细微纹理细节的信号时才出现。根据这一特性,在做数字图像处理时对包含信息量大的低频谱区域分配较多的比特数,相反的对于包含信息量低的高频谱区域分配较少的比特数,达到图像压缩的目的,而图像质量并没有肉眼可察觉的降低。除了DCT变换,常用的变化算法还有:Walsh-Hadamard沃尔什哈达玛变换、哈尔变换、傅氏变换等。

  DCT变换公式为:

  

 

  当u=v≠0时C(u)=1,C(v)=1。f(i,j)经过DCT变换之后,F(0,0)是直流系数,其他参数时为交流系数。经过DCT变换后一幅图像的DCT系数块集中在8×8矩阵的左上方,这里直流DC系数幅度最大,这一矩阵区域集中了图像的大部分低频频谱分量,离矩阵左上角越远的高频频谱几乎不含图像信息。变换过程本身虽然并不产生压缩作用,但是变换后的频率系数却非常有利于码率压缩。

  量化是对DCT系数的一个优化过程,利用了肉眼的高频不敏感特性对数据进行大幅压缩。整个过程是简易的把频率域的每个成份除以对应的常数,并对结果四舍五入取整,整个流程的目的是减少非零的系数以及增加零值系数数目。量化是有损运算,是图像质量下降的主要因素。对于人眼对亮度与色差的敏感性不一致,分别使用亮度量化表与色度量化表。对量化后的数据采用zigzag蛇形编码,这是因为交流分量中含有大量的零值,zigzag编码可以产生更多连续的零值,对下一步使用行程编码非常有利。

  行程编码(Run Length Coding)是一种根据相同数据连续重复多次的情况简化表示的算法。例如,5555333333999按照行程编码表示为(5,4)(3,6)(9,3)可以对数据,尤其是大量的零值压缩数据长度。

  编码后的数据还须通过Huffman编码来压缩,Huffman编码的最大特点是使出现频率较高的数字小于8位,而出现频率低的数字大于8位,这使得数据大幅压缩。

  到此数据的压缩过程结束,对压缩后的数据按照JPEG文件格式要求进行保存,加上文件开始标记Start Of Image=FFD8,文件结束标记End Of Image =FFD9,量化表标记Deftne Quanttzation Table=FFDB,霍夫曼编码表标记Ddfine Huffman Table=FFC4,帧开始标记Star Of Frame=FFC0等标记,再加上图片识别信息字节标记就最终形成完整的可用于传输或存储的JPEG帧图像,通过套接字接口不间断地发送JPEG图像即形成MJPEG视频流。

  为提高CPU效率,减少进程间切换产生的开销,将压缩算法函数集成到单一线程里。JPEG核心压缩编码函数MCUcode实现如下:

  

 

  其中Y1、Y2、Y3、Y4对应水平排列的4像素亮度值,CB、CR是水平排列以2像素为1单位像素的色度值。

3 Android客户端设计

  Android是Google公司推出的针对移动设备的操作系统,底层采用Linux内核,应用程序采用类Java语言编写,并运行于类JVM虚拟机的Dalvik虚拟机之上。该系统具有开放源码免费授权的优势,功能完善和成熟,已获得厂商的广泛支持和大量市场份额。eclipse IDE开发环境友善,因此选用Android系统作为物联网摄像机客户端开发平台。

  Android程序一般由多个Activity、Intent、Content Provider、Service等程序框架组成,其中最基础的是Activity活动类,该类相当于软件运行时的一个页面,在页面之上可添加各种控件,如button按键、ImageView图片、Text boxes、Lists列表等。除此以外还负责监听系统事件,负责启动其他的Activity类。在多个Activity类之间跳转就需要用到Intent类,Intent类有两个重要部分:动作和动作对应的数据。常用的动作有MAIN、VIEW、PICK、EDIT等,动作数据则以URI形式表示。通过Intent类还能传递参数,作用类似链条串起Activity类,Activity类跳转图如图5所示。

  

 

  解析视频流须先由网络获取数据流,实现的方法代码如下:

  

 

  需要注意的是,在AndroidManifest.xml文件中需加上语句,表示程序拥有网络的完整访问权限。获取每帧数据后继承AndroidSDK中提供的viewr.SurfaceView类与graphic s.Canvas类,将收到的完整帧图像按队列顺序不间断地显示在视窗框架类中,对人眼视觉帧率超过5 fps时即有视频效果,到25 fps即是电影流畅度。对丁定点定位监控,经过测试出于节省带宽费用考虑设定5 fps即能满足基本需求,10 fps是较为合理参数。将编译后应用程序安装到手机中,Android实时监控截图如图6所示。

  

 

  结语

  本文描述了网络摄像机的软件设计与MJPEG算法原理,结合Android移动技术,开发了整套系统;并实际应用于验证系统,取得了良好结果。期望在后续工作中涉足图像识别算法、物体追踪算法、人体行为侦测算法等图像领域,使网络摄像机变得更智能。

关键字:Android  MJPEG  网络摄像机 编辑:神话 引用地址:基于Android的MJPEG网络摄像机设计

上一篇:网络视频编码器在视频监控的实现步骤
下一篇:视频会议方案启拓浅析

推荐阅读最新更新时间:2023-10-12 20:41

原生党福利 Android 8.0将可自由改变系统主题
    有人喜欢用原生 Android,是因为系统的纯净流畅以及安全性,还有可以最早获得新系统的更新的特权;有人喜欢用第三方定制的 Android 系统,是因为它的可玩性更高,而其中可更换主题的功能更是受一众玩家欢迎。 (使用 Launcher 更换主题,但一般仅限于主屏)   不过,对于原生 Android 用户来说,想没事还换主题这件事可就非常难了。一般原生 Android 用户想换主题,有这么几个操作,装个第三方启动器(Launher),但最多只能改变主屏幕和图标样式,限制较多;如果想修改整个系统主题,要么就是将系统 Root,获得修改系统的权限,安装第三方的主题引擎,要么就是刷入第三方 ROM来安装各种主题。   听起来是
[手机便携]
文件显示iPhone发布前Android不支持触屏
    我们很早就听过这么一个说法:Android在一开始根本不支持触屏输入,是苹果发布了iPhone以后才紧急追加的触屏功能。当时的 证据就是一些泄露的图片,以及Android升级到4.0之前在细节上给人的糟糕体验。不过,在没有确凿证据的情况下,这种谣言只能成为两家公司之间粉丝 打嘴仗的噱头,并不能服众。 据说是Android原型机,活脱脱的丑小鸭   现在,三星和苹果之间的专利战争中所出示的证据似乎做实了证据链。三星出示的Android软件功能需求文件显示,在2006年的0.91版需求文件中,Android原来是设计成利用和屏幕分离的实体键盘来进行输入的。当时触屏被视为一个可能在未来支持的功能。   但是在2007年
[手机便携]
你的诺基亚8也能升级到安卓9.0
       在今年10月份的伦敦发布会上,HMD面向诺基亚手机的众多用户承诺,包括诺基亚8在内的数款机型都将会在年内升级到安卓9.0系统,不过现在距离2018年结束只剩下半个月时间,看来这个承诺是暂时无法全部完成了。   不过在昨天,HMD开始为诺基亚8手机提供安卓9.0测试版的更新,前提是要用户自行在Nokia Beta Labs注册后才能提前获取相关的测试版本,但是要注意的是该版本还处于测试阶段,或许会出现一些意想不到的BUG,建议主力机谨慎升级。   对于诺基亚8手机的安卓9.0升级包大小为1575.2MB,感兴趣的小伙伴可以在Nokia Beta Labs网站中注册,很快就能收到相关的更新通知了。如果在测试期
[手机便携]
基于Android智能家居远程监控系统设计
摘要: 目前,远程视频监控系统已成为智能家居的重要组成部分。智能监控系统基于Android操作系统平台,以平板式计算机作为客户端,通过HTTP协议从IP摄像机下载监控图片,并利用多种算法对家中各房间或不同角度的情况进行智能监控。   近年来,视频监控系统已在制造企业、物业管理、无人职守终端、银行、交通、仓库等领域得到广泛应用。当家庭中有特别需要关注的物体和区域时,家庭的主人可在其所处的家庭环境中安装摄像头,通过网络远程观察其状况,当发生意外情况时也可通过网络监控事态的进展。随着智能移动终端的广泛普及,同时由于其特有的便携性和易于接入网络的特性,移动终端成为动态监控和现场监控的理想选择。   本文设计的视频监控系统客户端
[模拟电子]
基于<font color='red'>Android</font>智能家居远程监控系统设计
Android各版本最新份额:果冻豆达62% 仍居首位
    谷歌今日公布了Android各版本份额的最新数据。数据显示,奇巧的份额达到2.5 %,果冻豆份额继续稳步增长,达到62%,在Google Play中仍保持主导地位。其他Android版本的份额均有所下滑。 具体来看,使用果冻豆的Android用户比例为62%,姜饼、冰淇淋三明治、冻酸奶、蜂巢的用户比例分别为19.0%、15.2%、1.2%以及0.1%。 奇巧(即Android 4.4)份额新添0.7个百分点(从1.8%到2.5%)。在果冻豆三个版本中,Android 4.3增长0.7个百分点(从8.9%到9.6%),Android 4.2提升0.8个百分点(从16.3%到17.1%),Android 4.1下滑0.2个百分
[手机便携]
谷歌欲放松新领域中对Android的管制
   据科技博客网站re/code报道,谷歌正在推动其多才多艺的Android操作系统进入新领域,例如汽车、手表和电视机。作为这一过程的一部分,谷歌也大幅限制了硬件厂商修改Android核心部分的能力。 例如,在首批Android Wear设备中,软件定制主要局限于数款定制表盘。但谷歌坚称没有“独家控制”Android的计划。硬件厂商和移动产业其他厂商普遍担忧谷歌会独家控制Android。 谷歌工程副总裁希罗史•洛克海默尔(Hiroshi Lockheimer)本周早些时候在接受采访时说,“这不是谷歌的风格。”他的评论正值谷歌发布Android 5.0 Lollipop(棒棒糖)之际,除手机、平板电脑外,Android 5.0
[手机便携]
库克:未来更多苹果应用会登陆Android
    本文来自太平洋电脑网   去年,苹果把自家的Apple Music音乐串流服务带到了Android平台,这也是他们在谷歌这个移动平台上的首次“试水”。而根据苹果CEO蒂姆?库克最近在员工活动上的说法,苹果未来会继续执行跨平台战略,在Android上推出更多的应用产品。 苹果未来应该还会在Android上推出更多的应用   库克在这场员工活动中说道,Android版Apple Music是他们观察能否在安卓平台上进一步拓展服务的一次“试水”。尽管库克接下来并未具体透露会有哪些应用,但苹果真的打算制作更多的Android 版应用,iCloud、Apple Pay、iMessage甚至是其生产力应用是最直接的选择。
[手机便携]
CSR Synergy软件升级 将蓝牙引入Android平台
CSR公司日前宣布, 其针对Android平台打造的嵌入式连接软件CSR Synergy现已升级,全面支持蓝牙低功耗(v4.0)版本。这是全球首例针对Android平台的蓝牙低功耗商业应用,它为Android智能手机和平板电脑带来了一系列令人兴奋的创新消费案例。并将连接能力扩展到日益壮大的小型传感器和超低功耗设备组成的新型生态系统中。2011年2月14日至17日在巴塞罗那举行的世界移动通信大会上,CSR公司已经展出了众多蓝牙低功耗应用案例。 CSR Synergy for Android嵌入式软件的特点是“即插即用”,因此,OEM厂商可以加快推出功能丰富的差异化手机,消费者在感受Android操作系统自身优势和灵活性
[手机便携]
小广播
最新模拟电子文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved