微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于Android的MJPEG网络摄像机设计

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

时间:01-28 来源:3721RD 点击:

3Android客户端设计

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

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

图5 Activity类跳转图

  解析视频流须先由网络获取数据流,实现的方法代码如下:
public static VideoInputStream read(String url) {
HttpResponse res;
DefaultHttpClient httpclient=new DefaultHttpClient();//http客户端
try {
resource=httpclient.execute(new HttpGet(URI.create(url)));
return new VideoInputStream(resource.getEntity().getContent());
……
}}//从响应中获取消息实体内容

  对已获取的数据流按照JPEG标准文件头分段,实现的方法代码如下:
public Bitmap readFrame() throws IOException {
mark(FRAME_MAX_LENGTH);//在数据流中设置标记,调用mark方法
int headerLength=getStart(this, START_MARKER);//计算文件头长度
reset();//reset方法重置数据流指向最后一个标志位置
byte[] header=new byte[headerLength];
readFully(header);
try {
ContentLength=countContentLength(header);//计算数据内容长度
}
catch (NumberFormatException nfe) {
ContentLength=getEnd(this, END_MARKER);
}
byte[] frameData=new byte[ContentLength];//存取帧字节数据
skipBytes(headerLength);//跳过文件头字节
readFully(frameData);
return BitmapFactory.decodeStream(new ByteArrayInputStream(frameData));
}

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

图6 Android实时监控截图

结语

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top