1系统的软件设计
1.1搭建移植前端编译环境
监控前端的硬件平台是Tiny6410嵌入式开发板,软件平台是Android操作系统。前端操作系统的搭建和移植可分为以下几步:
①、搭建Linux开发平台。本文Linux操作系统选用虚拟机的安装方式,当起安装成功之后即可实现文件共享。共享文件夹为D:\VirtualBoxVMs\win7share#mkdir/mnt/linuxshare//设置共享目录#mount–tvboxsfwin7share/mnt/linuxshare//挂载
②、建立交叉编译环境。本文选用arm-linux-gcc-4.3.2作为交叉编译工具。#tarxvifarm-linux-gcc-4.3.2.tar.bz2//进行解压命令#gedit/root/.bashr//把交叉编译器路径加入到环境变量中#arm-linux-gcc–v//重启系统,使配置生效
③、解压安装源代码。此步骤为创建一个工作录,将所需要的源代码解压安装到此目录中。#mkdir-p/development/Tiny6410/android//建立目录#tarxvzf/tmp/android/android-kernel-2.6.36.tar.gz//解压Android内核源代码
④、配置编译U-boot。配置和编译U-boot需要根据硬件环境进行相应的配置。本文选用的硬件平台的内存容量为256M,可支持NANDFlash启动的U-boot配置编译和支持SD卡启动的U-boot配置编译。
⑤、配置和编译Linux内核。在命令行执行以下代码:#cd/development/Tiny6410/android/linux-2.6.36-android#cpconfig_android_n43.config#make代码执行完成后,生成zImage。
2视频压缩编码
视频监控需要通过网络进行视频数据的传输,这样就对网络的数据传输速率提出了一定的要求。由于数字化视频数据占用很大带宽,如果不对视频图像进行压缩处理,实现实时传输几乎不可能。视频数据因其有大量的冗余信息,如空间冗余、时间冗余、结构冗余、视觉冗余等,才能进行压缩处理。本文选用H.264作为视频压缩编码标准。它有如下优点:编码效率更高、容错能力强、视频画面质量高、网络适应能力强。由S3C6410处理器接收摄像头的视频信号。采用S3C6410作为视频监控服务器的核心芯片,主要是由于很多视频监控系统中视频压缩编码方式采用的是软件编码方式,软件编码方式数据的运算量很大,效率不高,很难实现真正意义上的实时监控。S3C6410是一个16/32位RISC处理器,旨在提供一个具有成本效益、低功耗、高性能的应用处理器解决方案,它采用64/32位内部总线架构。它具有端口USB2.0OTG高速支持。其自带一个集成的多标准编码器(MFC)提供MPEG-4/H.263/H.264编码和解码的速度高达30帧/s。视频的H.264压缩编码则利用其内部集成的多媒体编解码器(MFC)进行既可。
3网络传输
本文采用实时传输协议RTP(RealTimeProtocol)对压缩了的视频数据进行传输。之所以选择RTP协议,是因为RTP协议主要是为了实现网络中多媒体数据流的实时传输。该协议可以实现单点或者多点的实时数据传输,提供了相关的时间信息并能够实现数据流的同步。不管是相对于具有延时效果的TCP协议还是相对于不保证服务质量的UDP协议,RTP协议都是良好选择。为了将H.264的视频数据通过RTP协议进行传输,就必须对数据按RTP协议进行封装。即将H.264的网络抽象层单元(NALU)作为RTP数据包的载荷数据组成完整的RTP数据帧。RTP数据帧的载荷数据定义了三个不同的基本载荷结构,分别是单一NAL单元模式、组合封包模式和分片封包模式。H.264采用的是简单的打包方案,即一个RTP分组里面放入一个NALU,然后设置RTP投标值。在接收端,通过RTP的序列信息来识别复制包并丢弃,取出有效的RTP包里的NAL单元。其组合封包模式和分片封包模式可参阅文献。
4Android客户端解码及显示
Android操作系统是内核基于Linux平台的源码开放的移动操作系统,它自2007年发布以来,就以其代码开源性有利于系统的升级换代和市场推广而受到各行各业青睐。因此,从发布至今,Android一直以顽强的生命力和惊人的速度前进,得到了众多手机制造商的支持。其体系结构分为四层,由下到上依次是由C语言开发,仅提供基本功能的Linux内核、包括虚拟机VirtualMachine在内的由C++语言开发的核心类库、应用程序框架和各公司利用Java语言开发的应用程序。本系统设计的客户端软件是基于android操作系统智能手机开发的,其作用为完成对H.264的解码和显示。本文利用android手机模拟器SDK开发的登陆界。
4.1客户端解码
视频数据的解码部分,采用AndroidNDK+C的C语言实现机制,它是整个解码的核心部分,需要移植H.264解码库,通过本地C语言的实现和解码库对码流数据进行处理,完成H.264解码,实现图像重建。
4.2客户端显示
本文的视频显示采用的是Android提供的Bitmap类显示BMP图像,H.264标准支持4:2:0的逐行和隔行的视频采样格式。为了能够在应用层完整的显示图像,图像需要在完成色彩空间从YUV到RGB的转换后,数据传给java层。android.graphics.Bitmap类实现视频显示功能。android.view.view类重载onDraw()方法,然后调用canvasdrawBitmap()方法,将图片连续播放显示在手机或平板屏幕上。当用户首次打开终端登录界面时,需输入远程主机IP地址和网络端口号。如果与监控前端摄像头信息一致,则终端与前端的视频连接建立成功,否则表明建立失败,用户需再次进行正确连接。当终端接收到告警信息时,用户即进行登录显示操作,只有在成功登录的情况下,终端才显示非法事件发生界面。
5测试结果
当手机接收到报警后,打开登陆界面,在无线覆盖区域,输入监控主机的IP地址和网络端口号,实现与监控前端的通信连接。前端为带有USB网络摄像头的PC,客户端为android模拟器。远程主机IP地址设为192.168.1.8,网络端口号设为8080。终端显示界面如图6所示。实现结果表明,该系统运行稳定,达到了预期监控效果。
6结束语
本系统利用VS+OpenCV和androideclipse开发环境进行设计及研究。该系统可应用于家居安防系统中,由于手机客户端完全利用开源代码实现,故有很强的移植性,便于系统升级。实践表明,在环境变量要求不大的区域,该系统实时反馈效果好,稳定性高。随着智能化、数字化、信息化进程的加快,本视频监控系统极有市场前景。
作者:许强键 杨飞 翁玲瑜 单位:广东工业大学信息工程学院