盛平,韩伟
(江苏大学 江苏 镇江 212013)
无线网络摄像机是wireless ip network camera的缩写,是基于TCP/IP协议的网络摄像机,主要组成结构是摄像头,视频服务器和无线wifi模块,使用linux操作系统,支持H264,MPEG4编码,支持RTSP视频流传输协议,可以通过PC客户端或者Android/IOS终端进行实时视频预览和观看录像回放;网络摄像机实际上是一台视频服务器和摄像镜头模块的集成,拥有IP地址和DDNS动态域名,并可通过WIFI网络传输视频信号。
Android是谷歌公司发布的一种基于Linux的自由及开放源代码的操作系统,截止2014年第四季度,Android系统市场占有率为83.6%,远远高于苹果的iOS系统、微软WP系统和黑莓。中国移动已经建成全球最大的4G网络,拥有4G基站70万个,用户数量超过8 000万,高速的移动网络促使着移动应用,尤其是对网络带宽依赖性非常强的流媒体应用大量增长,基于以上原因本文提出了一种基于无线网络摄像机的Android客户端,视频流畅、稳定、可靠性高、实时性好,具有很好的市场应用前景。
Android是一个分层的环境,构建在 Linux内核的基础上,它具有丰富的功能。Android应用程序是用 Java编程语言编写的,它们在一个虚拟机(Dalvik Virtual Machine)中运行[1]。这是一种开源技术。每个 Android应用程序都在 Dalvik VM的一个实例中运行,这个实例驻留在一个由Linux内核管理的进程中。
本次开发对应的 Android 4.4.2(API level 19),相比与其他版本,Android4.4是一次重要的平台发布版,为用户和应用程序开发者增加了大量新特性,例如:Android4.4增加了几个新的API,使应用程序能够与照片,影片和音乐等媒体交互。Media Effects是一个新的媒体效果框架,为了最佳效果,其直接应用了OpenGL的纹理。
Android Studio是Google开发的一款面向Android开发者的IDE,基于Java语言集成开发环境IntelliJ搭建而成[2]。相比与Eclipse+ADT,Android Studio提供了 IntelliJ IDEA的智能代码编辑技术,可实现自动代码完成、重构、代码分析等功能,Android studio还提供了一款英文名为Memory Monitor的性能分析工具,可显示应用内存使用情况随时间发生的变化,从而帮助开发者找出改进性能的办法。而且,Android studio采用了一种基于自动化构建工具Gradle的系统,支持在IDE之内或之外进行开发编译,有比较好的灵活性与扩展性。
本客户端的设计主要由Android UI(user interface)模块,视频流接收模块,视频播放模块,APP检测更新等模块组成;
图1 客户端功能模块结构图Fig.1 Structure chart of function module
Android SDK提供了Android平台上使用Java进行应用开发的 API(Application Programming Interface,应用程序编程接口)和工具,VSTCCAM SDK是威视达康公司提供的供第三方开发者获得威视达康前端设备视频流的软件开发工具包。本文主要使用这两个SDK完成Android应用的开发。
Android UI模块的功能有:用户注册和登录;从服务器上获取用户账号下面所有无线网络摄像机的UID,名称等,并以listview的格式显示给用户;添加和删除无线网络摄像机;查看用户之前截取的图像和录制的视频等。
视频流接收模块接收无线网络摄像机通过云服务器转发过来的视频流,然后交给H264解码模块进行解码,最后通过视频播放模块将实时监控视频呈现给用户。
本客户端的具体流程:如果用户已有账号,则直接登录,如果没有账号,进入注册页面进行注册。用户登录后,APP从服务器获取用户已经添加的网络摄像机列表,同时在另一个线程(Thread)中,APP向服务器发送检测最新版本的请求,如果服务器上存在更新版本,则提示用户是否升级。用户通过添加/删除摄像机模块可以进行摄像机的添加和删除动作,结果发送到服务器进行存储,下次用户从其他设备登录可以获得最新的摄像机列表。用户选择需要预览的摄像机调用VSTCCAM SDK获取监控实时视频流,然后通过Surface ViewHolder将监控画面呈现给用户。如图2所示。
图2 客户端设计流程图Fig.2 Flow chart of client design
2.2.1 Android UI设计
系统界面设计包括登录注册界面和功能区界面,功能区界面按功能划分有获取并显示摄像机列表,添加或是删除摄像机,实时视频预览,下载最新版本应用4个部分,UI的设计遵循简洁原则,使交互界面易于用户理解和使用。应用界面的呈现使用Android SDK[3]中的Fragment控件,当我们的应用程序同时适用于平板电脑和手机时,可以利用fragment实现灵活的布局,改善用户体验。当应用运行在手机上时设备列表和实时预览显示在不同的页面,当应用运行在平板上时设备列表和实时预览这两个fragment就可以嵌入在同一个activity中,从而更加充分的利用平板的屏幕空间。如图:
图3 平板电脑布局Fig.3 Layout in tablet
2.2.2 登陆功能、摄像机列表获取等功能设计
Android客户端通过Http请求方式[4],从服务器调用登陆接口,获取摄像机列表接口,实现登陆并获取设备列表,查询报警信息,添加和删除摄像机等功能。
Android客户端登陆成功验证并获取到摄像机列表后,使用Android SDK提供的ListView组件呈现,它以列表的形势展现具体内容,比较适合多个摄像机的展示。
2.2.3 获取摄像机实时视频流模块设计
获取实时视频流功能的实现主要依靠摄像机厂商提供的SDK。首先将libavi_utils.so,libvstc2_jni.so导入到 Android工程中libs/armeabi/目录下。根据接口的描述,为了使用该接口,需要新建包”vstc2.nativecaller”。 接着在类 NativeCaller中加载库libavi_utils.so,libvstc2_jni.so并对本地方法进行声明。如下:
在 StartActivity类中调用 NativeCaller.PPPPInitial()初始化服务器,之后使用onBind()启动类名为bridgeservice的服务,使用service之前需要在AndroidManifest.xml配置文件中添加Service,具体添加方法如下:
2.2.4 视频实时预览的程序设计
在整个移动安防监控系统中,Android端视频实时预览的最后也最重要的一步,由于4G或WIFI等无线网络的不稳定性与带宽限制,实时预览时Android客户端必须对接收到的RTSP数据流进行高效的解码。
Android提供了一个专门的视图控制器Android.widget.VideoView[5],封装了MediaPlay的创建和初始化过程,Video View可以用在布局管理器中,提供包括缩放和着色在内的很多显示选项。为了显示实时预览视频,创建VideoView部件并将他设置为用户界面的内容,然后设置传入的bitmap并触发start()方法。VideoView类可以从不同的来源(例如资源文件或内容提供器)读取图像,本系统通过从威视达康SDK获取的视频流读取画面数据。
SurfaceView继承于视图(View),可以直接从内存或者DMA等硬件接口取得图像数据,是个非常重要的绘图容器,这个视图里内嵌了一个专门用于绘制的Surface[6]。Surface View类中主要方法如表1所示。
表1 SurfaceView主要方法Tab.1 Method of surfaceview
SurfaceHolder是一个接口,用于管理SurfaceView。里面有两个常用的内部接口SurfaceHolder.Callback和Surface Holder.Callback2,Callback2 用来实现 Callback。
通过SurfaceHolder来操作画面对象,当SurfaceView初始 化 后 通 过 调 用 getHolder() 获 取 SurfaceHolder,把SurfaceHandler传给另一线程并且用lockCanvas()获取canvas。 完成绘图后,调用 unlockCanvasAndPost()释放 canvas锁,并显示视图。
2.2.5 检测新版本功能程序设计
Android客户端进入到MainActivity主进程中,会另开一个线程,向服务发送一个post请求,Android客户端解析出服务器返回的带有最新的版本信息的数据后进行对比,如果版本号相同则不进行任何提示,如果本机版本号低于服务器提供的版本号则弹窗窗口提示用户选择是否升级。用户确认升级后,调用Android SDK提供的DownloadManager接口,进行下载。
本测试环境下使用的移动终端采用三星galaxy4,该机型采用的是Android4.4.2系统,网络环境为中国移动4G网络。
本次实验使用的无线网络摄像机是型号为C7837WIP,生产厂商为深圳威视达康。摄像机具体参数如表2所示。
表2 无线网络摄像机参数Tab.2 Parameters of wireless ip camera
软件安装完成后对核心功能进行测试。输入账号密码验证成功后进入APP主界面,选择相应的摄像机进行实时预览。登陆界面和设备列表界面如图4所示。点击需要预览的摄像机进入实时预览界面,在4G网络下,视频流畅,卡顿和掉帧率较低,稳定性、实时性都比较好。实时监控效果图如图5所示。
图4 登陆界面和设备列表界面Fig.4 UI of log in and camera list
本文以Android为平台,开发了一款针对无线网络摄像机的客户端。通过和服务器之间进行交互,实现用户登陆,注册,添加删除摄像机等功能;利用摄像机厂商提供的网络SDK获得视频流,再结合Android提供的SurfaceView接口实现了实时视频预览;程序设计时应充分考虑到使用场景和用户体验,将大部分操作移动到后台执行,同时自动更新客户端版本,同时用户界面人性化,操作简单。整个方案可以应用到许多多媒体应用中,如视频数据采集,庭院看护,以及远程交流,实现稳定可靠随时随地的实时视频服务。
图5 实时监控效图Fig.5 Picture of video surfaceillance
[1]Shane Conder,Lauren Darcey.Android wireless application development[M].Boston:Addison-Wesley,2010.
[2]Reto Meier.Professional Android 2 application development[M].Indianapolis:Wiley Pub,2009.
[3]James Steele,Nelson.To The Android developer's cookbook:building applications with the Android SDK[M].Boston:Addison-Wesley,2010.
[4]柯元旦,宋锐.Android程序设计[M].北京:北京航空航天大学出版社,2010.
[5]Jordan.Practical Android Projects[M].California-Berkeley,Apress,2011.
[6]丁伟.基于Android平台的移动流媒体客户端[D].广州:中山大学,2010.