基于Android的视频监控系统设计与实现

目前视频监控系统正朝着数字化、网络化、功能综合化的方向不断发展。传统的视频监控系统大多通过线缆或 光纤将视频信号传输到监控中心,但由于网线的限制,不利于监控系统的迅速搭建。随着无线网络特别是3G网络的普及,视频监控系统面临着更加广阔和自由的空间[1]。
    3G网络在移动环境下支持的带宽有限,而视频监控系统的实时性要求尽可能清晰流畅地传输视频信号,因此需要在保证视频信号不失真的情况下,进行最大可能的压缩。H.264标准采用了高精度、多模式预测技术提高压缩比以降低码流[2],可广泛应用于远程监控、电视会议以及可视电话等领域。
    本文介绍了一种基于Android系统的视频监控系统,利用PDA结合H.264编码技术和3G无线网络通信技术实现了对远程视频的实时监控。
1 系统概述
    如图1所示,系统采用C/S架构,硬件部分包括带摄像头的PDA、H.264 编码器和后台监控计算机。系统的关键技术是编码器的设计,将拍摄到的模拟信号转换成数字信号,通过H.264编码器进行编码压缩,最后利用3G无线网络将压缩后的数据传送到后台监控计算机完成实时显示。后台计算机还可以通过3G网络向PDA发送控制命令,实现云台控制等相关操作。本文主要介绍PDA端的设计与实现。

2 Android操作系统
    Android是一种以Linux为基础的开放源码操作系统,主要用于便携设备。Android拥有一个提供Java编程语言功能的核心库。每个Java编写的应用程序都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个可以同时高效运行多个虚拟系统的设备,这样的特点使得Android系统能够很好地适应手机特殊的运行环境。通过在Eclipse上安装Android SDK插件,可以轻松搭建Android开发平台,在该平台编译的代码可自动生成APK文件,直接进行安装使用[3]。
3 PDA端视频处理的实现
    基于Android的视频监控系统最重要的部分就是PDA以及外设的设计和视频的处理。PDA有限的内存要求这部分的实现尽量做到低功耗、高性能,达到算法和软件的最优化。
    由于DSP芯片具有极强的可编程性,方便后期进行编码的比较和优化。因此编码器采用ADI公司推出的DSP芯片Blackfin533。该芯片集成了大量的外设和存储器接口,在结构上对C/C++进行了优化,能够达到很高的代码密度,可以满足H.264编码的实时要求。
3.1 H.264算法的优化选择
    与以往的视频编码标准(如H.263和Mpeg系列)只采用一种或两种宏块编码模式不同,H.264采用从16×16到4×4的七种宏块编码模式,使得H.264相比H.263节省了大约50%的码率。但同时面临着可观的运算量消耗[4]。为了达到实时编码,如何实现快速的模式选择算法成为解决问题的关键[5-6]。H.264/AVC的宏块编码模式大量应用了遍历,使得运算量过大,适当地减少遍历的模式或者提前终止遍历就可以提高编码的速度[7]。而减少无效遍历的关键在于限制遍历的范围和制定可靠的终止准则。
     Curr为当前待编码的宏块,A、B、C、D分别为四个方向的相邻宏块,A_cost、B_cost、C_cost和D_cost分别为A、B、C、D的编码代价,门限T利用式(1)计算得出:
    T=(5×A_cost+5×B_cost+4×C_cost+2×A_cost)>>4                  (1)
    Curr分别按照4个相邻宏块和自身宏块的模式编码,比较其代价值得到最优编码。图2所示为对宏块A和B的优化编码流程图(对宏块C和D的编码类似)。通过测试比较及优化算法的处理,视频在保真的情况下,有效地降低了压缩比,提高了算法的运算速度。

3.2 软件的设计
    Android平台实现主要包括通信模块和数据处理模块。
    通信模块采用了Socket网络通信技术进行UDB通信。通信之前的准备工作是完成Socket的创建,同时绑定Socket和端口号,设置开始监听端口。监听开始后,主程序循环监听、接收请求信号,同时创建新的客户连接Socket以及相应的通信进程。
    数据处理模块主要是对视频流数据的提取和传导。开启摄像头后,在视频预览时截取视频流每一帧的数据。把截取到的数据传输到应用层进行图像绘制,通过外设传输到DSP芯片进行视频编码,编码后将数据通过网络传送到后台监控室。Android应用层[8]的核心代码如下:
    p0=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
                                                                // 创建socket
    bind(p0,(struct sockaddr *)&(addr_org),sizeof(struct sock-
          addr_in));                        // 绑定IP和端口
    sendto(p0, SendDataBuff, ulLen, 0, (struct sockaddr *)&
        (addr_dst), sizeof(sockaddr_in));
            // 向指定IP发送SendDataBuff中的视频数据
     public ImageSurfaceView(Context context, AttributeSet attrs)
         {paint = new Paint(); paint.setColor(Color.WHITE);
        paint.setAntiAlias(true);
        …… setFocusable(true);}    //初始化SurfaceView类
        public void surfaceCreated(SurfaceHolder holder) {……
        screenH = this.getHeight();screenW = this.getWidth
        ();handler.post(imageRunnable);}
                    //创建SurfaceView用于显示捕捉的图像
     Camera openCamera() {}                 //打开摄像头
    android.hardware.camera.PreviewCallback
                     //用来调用每帧图像数据data的接口
    DSP芯片中软件设计的主要目的是提高运算速度和效率。宏块编码采用不同位置独立编码,编程时尽可能地将判断转移到循环外,杜绝了大量帧内和帧间宏块的重复判断。利用快速的模式选择算法对宏块进行编码,进一步提高了编码效率。使用Blackfin533芯片专用的视频指令SAA求取绝对差值求和函数SAD(),在很大程度上提高了运算速度。具体SAA的使用代码如下:
     for(i=0;i<16*16;i++)
       sad+=abs( *pSrc++ - *pRef++);
       LSETUP(sad_START,sad_END) LC0=P1; 
       sad_START:
       r3 = [i1++]; 
     SAA(r1:0,r3:2) || r1= [i0++] || r2= [i1++];    
     SAA(r1:0,r3:2)(R) || r0= [i0++] || r3= [i1++];    
     SAA(r1:0,r3:2) || r1= [i0++] || r2= [i1++];
          sad_END:SAA(r1:0,r3:2)(R) || r0=[i0++] || r2=
        [i1++]
4 实现结果
    图3为系统在HTC G14手机和后台计算机中利用联通3G网络实验的结果。手机拍摄预览的视频显示在计算机上;后台可选择监视某一台手机的视野,还可以通过发送命令放大或缩小视野的范围,整个过程不受距离限制。经过多次测试,PDA端与后台在同一帧的显示仅存在3 s~5 s的延迟。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值