来源:中国一卡通网 作者:不详 发布时间:2012-04-27 10:16:28 字体:[大 中 小]
摘 要:针对智能家居场景需求,设计了基于ARM9处理器Linux操作系统的网络摄像机。深入研究了MJPEG视频压缩算法,阐述了算法实现过程,并设计出基于Android操作系统的3G手机网络摄像机客户端软件。本系统通过实地安装与测试达到了预期效果,突破了传统网络摄像机客户端固定地域的限制,有良好的应用前景。
图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文件中需加上语句,表示程序拥有网络的完整访问权限。获取每帧数据后继承Android SDK中提供的view.SurfaceView类与graphics.Canvas类,将收到的完整帧图像按队列顺序不间断地显示在视窗框架类中,对人眼视觉帧率超过5 fps时即有视频效果,到25 fps即是电影流畅度。对于定点定位监控,经过测试出于节省带宽费用考虑设定5 fps即能满足基本需求,10 fps是较为合理参数。将编译后应用程序安装到手机中,Android实时监控截图如图6所示。
图6 Android实时监控截图
结语
本文描述了网络摄像机的软件设计与MJPEG算法原理,结合Android移动技术,开发了整套系统;并实际应用于验证系统,取得了良好结果。期望在后续工作中涉足图像识别算法、物体追踪算法、人体行为侦测算法等图像领域,使网络摄像机变得更智能。
推荐文章
西门子浸入式温度传感器QAE26系列
西门子Synco700通用扩展模块RMZ78系列
西门子捆绑式温度传感器QAD2系列
西门子风管式温度传感器QAM21..1..系列
西门子风管温度传感器QAM21系列
GSM汽车防盗器
无钥匙进入汽车防盗器
智能视觉报警器
遂宁监控858红外防水摄像机
论坛热帖