杨 军
(西北政法大学,陕西西安,710122)
基于Android平台的远程视频监控系统研究
杨 军
(西北政法大学,陕西西安,710122)
随着中国移动互联网的快速发展,基于移动平台的视频监控凭借其独特的优越性开始进入人们的视野。智能手机终端的普及为移动视频监控提供了承载终端,3G通信网络的发展为移动视频监控数据的传输提供了保证,它们都为实现移动视频监控提供了有利条件。本课题是横向课题“大连****信号发射机远程控制系统”中的远程视频监控子系统的重要组成部分,提出了一种基于Android移动设备的远程监控系统解决方案。
Android平台;RTP/RTCP;H.264;FFmpeg;视频监控
视频监控具有准确、直观、及时和信息丰富等突出优点,已经被广泛应用到各种场合。视频监控系统主要负责将监控点实时采集的视频流实时地传输给视频监控中心,以便于视频监控中心进行远程视频监控,对突发事件进行及时指挥处理。本课题是横向课题“大连****信号发射机远程控制系统”中的远程视频监控子系统的重要组成部分,提出了一种基于Android移动设备的远程监控系统解决方案。系统分为三个子系统:Android移动设备端子系统,服务器端子系统和监控客户端子系统。移动设备端进行视频及地理信息采集,通过流媒体协议将经过编码的H.264实时视频数据发送到服务器端,服务器端进行存储及解码,监控客户端完成视频播放、视频管理及辅助控制。
Android操作系统架构由高到低共分为4层,其分别是应用层、应用框架层、系统运行库层及Linux内核层。在Android操作系统开始时已经集成了部分核心应用程序,如拨号应用,地图应用,网络浏览器应用等;应用框架层为Android应用提供API框架支持。应用程序的开发需要依赖系统的API框架,API使的程序开发架构设计得以简化,提高了开发效率;应用程序框架层使用组件是系统运行库提供组的,该层包含多个核心库;Linux内核是硬件和软件之间的抽象层,Linux内核为Android提供核心服务,包括网络协议栈,进程管理,内存管理,驱动等。
视频监控系统需要传输大量的实时视频数据,由于网络结构复杂、带宽有限等硬件条件限制,监控系统必须综合应用流媒体技术和视频编解码技术,才能满足在复杂条件下实时监控等功能要求。本系统将采用压缩率较高的H.264技术对视频数据进行编码,然后封装到RTP / RTCP数据包中,利用UDP协议进行传输。
RTP/ RTCP是AVT工作组于1996年在RFC1889文档中的第一次提出的。 2003年后,在修改的基础上,提出的RFC3550。RTP主要是为端到端的实时流媒体数据流提供传输功能,它也支持多播和单播。但是,RTP协议本身只负责实时的数据传输功能,并不能提供任何的传输质量保证,也不具有拥塞控制功能。RTCP协议用于监控数据流的传输质量,为RTP数据提供控制功能,以及为系统提供拥塞控制。
如果一个应用程序启动一次RTP会话,一般会同时占用两个端口,一个端口提供给RTP协议,一个端口提供给RTCP协议。RTP协议自己不提供可靠的传送机制即不能按顺序传送数据包,同时也不提供拥塞控制和流量控制,这些服务它必须依靠RTCP提供。
在RTP通信期间,各个参与者周期性的传送RTCP包。RTCP包中通常包含己发送数据包的数量,己接收的数据包的数量等统计信息。因此,服务器端可以利用这些数据包中的信息进行动态地修改传输速率,甚至修改有效载荷类型。比如采用H.264压缩标准进行实时视频通信时,当接收端实时数据处理能力不够或者接收端出现数据拥塞时,发送端就可以根据RTCP包中的统计信息进行判断,适当调整量化步长并修改码率,从而改善通信质量。RTP和RTCP配合使用,它们能以最小的开销和最有效的反馈使传输效率最佳化,因而特别适合在Internet上传送音视频实时数据。
本系统软件采用基于组件的设计思想。服务器端的监听组件(监听线程)时刻在监听Android移动设备发来的连接请求,请求中包含移动设备的基本信息,比如:手机的IEMS、移动运营商名字、摄像头是否支持调焦等信息。当监听组件接收到一个网络请求后,对请求信息进行预处理,同时启动视频数据通信组件。通信组件负责接收Android移动设备发来的所有数据,比如:视频数据、GPS数据等信息,接收到数据后对数据进行处理,并将相关数据保存到数据库中,同时通信组件支持向视频监控客户端提供实时视频数据及视频相关数据(GPS信息、协助控制信息)。视频监控客户端通过播放组件查看实时视频,并通过控制组件进行协助控制,控制指令通过服务器间接传输到Android移动设备,Android移动设备响应后给出控制结果。具体的控制指令包含:摄像头的焦距控制、视频采集说明信息等提示命令。
系统共分为三个子系统:Android移动设备端子系统、服务器端子系统、监控客户端子系统。Android移动设备端子系统包含数据采集模块,控制模块,通信模块;服务器端子系统包含监听模块,通信模块,存储模块。监控客户端子系统包含视频管理,视频播放及远程控制模块。本系统的软件系统结构如图1所示。
图1 软件体系结构示意图
Android移动设备端子系统主要包含视频采集模块,GPS信息采集模块,数据传输模块,远程控制模块等,模块结构示意图如图2所示。
图2 Android移动设备端模块示意图
Android 多媒体框架的核心是Open Core,它也被称为PV(Packet Video)。他实现Android平台的所有音视频采集、播放的功能。在实际开发中我们并不会过多的研究Open Core的实现,Android提供了上层的Media API给开发人员使用,MediaPlayer和MediaRecorder。本系统将采用MediaRecorder进行视频采集。
Android系统提供了android.telephony.TelephonyManager类,方便应用程序开发者获取手机的基信息。TelephonyManager类包含了很多用于获取与手机通讯状态相关信息的get方法。其中包括手机用户的信息、手机SIM的状态信息、通信网络的状态信息等。程序中可以使用向对应get方法获取这些数据。系统提供了如下方法获取TelephonyManager类的对象:
Context.getSystemService(Context.TELEPHONY_SERVICE)
系统的通信组件是采用多线程技术,它独立于视频采集组件,即数据采集是一个线程,通信是一个线程。通过系统的总体结构设计可以看出,系统通信一共分了三个部分,分别是:视频数据传输前的基本参数通信、视频数据通信、视频采集完成后辅助数据通信。第一部分和第三部分通信是基于TCP协议的通信,信息载体为XML,服务器端负责建立连接的是监听主线程;视频数据通信是基于UDP协议的,采用RTP进行封装,通过RTCP进行传输控制,通信目标是服务器端为该客户启动的新的监听进程。
服务器端子系统主要包含通信模块、监听模块、数据解码、数据存储等模块,如图3所示。
图3 服务器端模块示意图
当服务器端程序启动后,同时启动主监听进程,从前面介绍的Android移动设备端与服务器端的网络通信过程可以看出,每次视频录制上传前后客户端将与服务器端的主监听进程进行两次通信,分别完成不同的功能。数据传输组件主要完成接收移动设备端发来的视频数据,对数据包进行解析,向上层提供每一帧的视频数据。
系统的界面显示和视频播放部分是由JAVA实现的,但是为了满足系统在解码速度上的要求,系统在实现视频解码模块移植时,采用的是JNI框架进行开发,解码部分的底层代码使用C语言开发。
①C语言实现关键函数
通过javah命令生成系统需要的.H文件,然后用C语言实现如下三个方法:
//初始化H.264解码器
initDecoder(int t_width.int t_height)
unInitDecoder(int t_width.int t_height)
//对缓存区数据进行解码
decoderNal(byte[] in,int in_size,byte[] out_data)
②生成dll文件,并在程序中调用
使用MingW工具的gcc命令编译第二步中实现的方法,在JAVA类通过如下代码调用C语言实现的函数:
static{System.loadLibrary("myH264.dll");}
③系统调用解码程序。
监控客户端系统主要包含视频查询、视频播放、远程控制三项主要功能,该系统采用JAVA语言,MVC架构,利用反射机制等技术实现。核心配置文件及JAVA类如下:
①config.xml:主要配置用户界面将要使用的JFrame,JMenuBar,JMenu,JMenuItem,JButton,JPanel,JLabel,JTextField等控件的结构关系,用于在系统启动时构造系统显示界面。
②ButtonAction.java:该类中存在系统将要调用的各种业务方法,例如上面提到的showPrintWindow方法,唯一要求是所有方法是无参数方法。在这些方法里完成要实现的业务。
③SwingViewBase.java:该类中包含生成各种显示组件的方法,如“public static void initJLabel(String name,String text)”、“public static void initJButton(String name,String text,String onclickFunc)”等工具方法。
④SwingView.java:该类主要定义了系统中用到的显示控件的引用。
本课题提出了一种基于Android平台远程视频监控系统设计方案。分析H.264视频编码标准和对FFmpeg项目中主要的结构体、函数、调用接口、特别是解码程序进行了研究,以开源的FFmpeg提供的H.264解码器为原型,并对FFmpeg解码器进行裁剪优化,从中提取H.264解码的核心部分,成功移植到JAVA平台。
[1] 陈彩莲.基于Android移动平台的智能视频监控系统设计[D].天津大学硕士学位论文,2011.
[2] Thomas Wiegand,Overview of the H.264/AVC Video Coding Standard[J].IEEE Transactions on Circuits and System for Video Technology.2003,13(7):560-576.
[3] Reto Meier.Professional Android 2 Application Development, 2010.
[4] Peter Jay Salzman.The Linux Kernel Module Programming Guide Version 1.1, 2001.
[5] 张璇.基于智能手机的流媒体播放及编解码研究[D].南京邮电大学硕士学位论文,2011.
Research on remote video monitoring system based on Android
Yang Jun
(Northwest University of Politics and Law,Xi'an Shaanxi,710122)
With the rapid development of China Mobile Internet,video surveillance based on mobile platform has entered people's perspective with its unique advantages..The popularity of smart mobile terminals for mobile video monitoring provides bearing a terminal,the development of 3G mobile communication network for mobile video monitoring data transmission to provide a guarantee,they both realize mobile video monitoring provides favorable conditions.The topic is the horizontal subject "Dalian * * * * signal transmitter remote control system of remote video surveillance system an important component of the proposed a solution of remote monitoring system based on the Android mobile devices.
Android platform;RTP/RTCP;H.264;FFmpeg;video monitoring