基于Android智能手机的远程视频监控的设计

发布时间:2024-03-14
摘要:为了实现移动视频监控,提出了一种基于智能手机的远程视频监控系统。介绍了监控系统的体系结构和硬件平台,阐述了嵌入式操作系统android应用程序的开发方法,并结合实际的应用系统,重点论述了android平台上视频监控客户端的设计思路。移植了音视频解码库ffmpeg进行h.264视频解码,并采用opengles实现实时视频显示。在无线局域网络的环境下对视频监控终端进行测试,达到了利用手机进行移动视频监控的目的。
随着多媒体技术、视频压缩技术以及网络传输技术的发展,视频监控正朝着数字化、网络化、智能化方向持续发展,并越来越广泛地渗透到政府、教育、娱乐、医疗等领域。目前大部分的网络视频监控系统是基于web服务器的,监控终端为pc机,用户使用浏览器获取监控服务。由于互联网接入地点的限制,普通的网络视频监控无法满足用户在任何时间、任何地点获取监控信息的需求。
本文介绍了一种以android智能手机为终端的视频监控系统,该系统将传统的视频监控与移动多媒体技术相结合,真正实现了移动视频监控。
1、系统的结构
本文中的视频监控系统采用c/s体系结构。
如图1所示,该系统由视频采集端(摄像头),视频服务器以及监控客户端等构成。
图1视频监控系统总体结构
视频服务器是整个系统的核心部分,它将摄像头采集到的原始模拟信号转换为数字信号,并对视频数据进行编码压缩,zui后通过internet将压缩后的数据传送至客户端。客户端通过tcp/ip协议访问服务器,通过对视频数据的接收、解码以及显示,实现实时预览功能。客户端也可以根据用户需求发送控制命令,实现对前端设备的控制操作,如云台控制等。
服务器部分采用hi3515处理器芯片为硬件平台,并移植了嵌入式操作系统linux作为整个系统运行的软件环境。hi3515是一款基于arm9处理器内核以及视频硬件加速引擎的高性能通信媒体处理器,具有h.264和mjpeg多协议编解码能力。
本文以基于hi3515的远程视频监控系统为例,重点介绍了android平台上监控客户端的设计过程。
2、android开发介绍
android是基于linux开放性内核的操作系统,是google公司在2007年11月5日公布的手机操作系统。android采用软件堆层的架构,主要分为三部分:底层以linux核心为基础,提供基本功能;中间层包括函数库和虚拟机;zui上层是各种应用软件。
android平台显着的开放性使其拥有众多的,应用日益丰富,不仅应用于智能手机,也向平板电脑、智能mp4方面急速扩张。
android应用程序用java语言编写,每个应用程序都拥有一个独立的dalvik虚拟机实例,这个实例驻留在一个由linux内核管理的进程中。dalvik支持javanativeinterface(jni)编程方式,android应用程序可以通过jni调用c/c++开发的共享库,实现java+c冶的编程方式。开发android应用程序zui简捷的方式是安装androidsdk和eclipseide.
eclipse提供了一个丰富的java环境,java代码通过编译后,androiddevelopertools会将它打包,用于安装。
3、监控客户端的设计与实现
基于android平台的监控客户端的总体框架如图2所示,分别由网络通讯模块、视频解码模块以及视频显示模块等构成。其中网络通讯模块接收来自服务器的所有数据,对数据进行解析,并将视频数据存入到视频缓冲区。视频解码模块负责从视频缓冲区中读取数据并送入h.264解码器进行解码。zui后,采用opengl图形库将解码后图像绘制到屏幕上实现视频播放。
图2客户端总体框架。
3.1h.264视频解码器的实现
在网络视频监控系统中,视频的编码压缩是非常必要和关键的工作,没有经过压缩的海量数据对网络传输系统来说是无法承受的[7].h.264是目前的视频压缩算法,它由视频编码层vcl和网络提取层nal两部分组成。其中,vcl进行视频编解码,包括运动补偿预测、变换编码和熵编码等;nal采用适当的格式对vcl视频数据进行封装打包。h.264标准对编码效率和图像质量进行了诸多改进,且抗丢包性能和抗误码性能好,适应各种网络环境,非常适合于对压缩率要求高,网络环境复杂的移动视频监控。
客户端接收的数据是经过h.264编码压缩后的数据,需要经过h.264解码还原视频图像后才能够显示,因此,h.264解码器是客户端的关键部分。这里移植了开源的音视频解码库ffmpeg进行h.264解码。在android应用程序中使用ffmpeg的步骤如下:
(1)在linux环境下安装android原生开发工具包ndk.
(2)创建jni文件夹,将ffmpeg工程复制到文件夹下。创建h264decoder.c源文件,提供android程序使用的接口函数,文件需要包括jni的操作头文件,且函数名有固定的形式,如com_ipcamera_preview_h264decoder表示com_ipcamera包下面preview类中h264decoder函数。
(3)创建android.mk文件,该文件包含正确构建和命名库的makefile说明。分别在local_src_files和local_c_includes项中添加编译模块所需源文件和头文件目录。
(4)执行ndk开发包中的ndk鄄build脚本,生成对应的。so共享库,并复制到android工程下的libs/armeabi目录下。
(5)在android程序中通过system.loadlibrary(库名称冶)加载所需要的库,加载成功后,应用程序就可以使用h264decoder函数进行h.264的解码。
3.2opengles绘图
为了提高绘图的效率,客户端使用opengles实现视频图像的显示。opengles是一个2d/3d轻量图形库,是跨平台图形库opengl的简化版。
opengles专门针对手机、pda和游戏主机等嵌入式设备而设计,目的是为了充分利用硬件加速,适合复杂的、图形密集的程序。
android中使用glsurfaceview来显示opengl视图,该类继承至surfaceview并包含了一个专门用于渲染3d的接口renderer,主要通过实现on鄄drawframe、onsurfacechanged以及onsurfacecreated等方法构建所需的renderer.解码器解码一帧图像后,调用glsurfaceview的requestrender方法通知opengles完成视频图像的显示。使用opengl绘图的核心代码如下:
3.3多线程设计
视频数据的接收和解码都是复杂、持续的过程,如果其中一个过程出现阻塞会影响整个程序的运行,因此,客户端使用多线程实现数据接收和视频解码的并行处理。在整个程序运行过程中,主线程响应用户操作,负责屏幕刷新工作,并创建两个子线程:数据接收和视频解码子线程,处理过程如图3所示。
图3子线程处理流程。
在java中,多线程的实现有两种方式:扩展java.lang.thread类或实现java.lang.runnable接口。这里通过继承thread类并覆写run()方法实现两个子线程。在多线程的应用中关键是处理好线程之间的同步问题,以解决对共享存储区的访问冲突,避免引起线程甚至整个系统的死锁。java多线程主要利用synchronized关键字和wait()、notify()等方法实现线程间的同步。
4、结束语
目前,该系统已经在实验室进行测试,服务器输出15fpscif格式的h.264视频数据,客户端安装在android手机上,通过wifi接入无线局域网中与服务器建立连接,用户界面如图4所示,可实现远程视频预览、云台控制等操作。
图4监控客户端
随着3g时代的到来,数据传输速度有了大幅提升,为移动实时视频业务的实现创造更好的条件。
手机用户可以直接接入3g网络访问视频监控服务器,实现移动在线的实时视频监控。由此可见,手机视频监控市场潜力巨大,具有很好的发展前景。
上一个:三菱plc触摸屏编程实例(三菱plc触摸屏软件是哪个)
下一个:笔记本摄像头打开是黑的(win10笔记本摄像头怎么打开)

小米手环自定义表盘在哪里找(小米手环自定义表盘在哪里看)
RC0603DR-07113KL,0603 113KΩ 0.5% 1/10W 电阻
茯砖茶茶叶品质和保健功能
选择sagermack(为您提供可靠的机电设备零配件)
非法集资诈骗罪和非法吸收公众存款罪的区别
高压电缆故障测试仪的故障原因
阿里巴巴云服务器购买方式
4D03WGJ0680T5E,厚声贴片排阻今日行情,最新价格
RLT05R025FTP现货库存,最新价格
多股屈服弯曲力试验机选哪个厂家好@台风资讯