APP下载

基于Android的实时警用视频监控系统

2016-08-24侯杰刘双广

广东通信技术 2016年7期
关键词:解码客户端编码

[侯杰 刘双广]

基于Android的实时警用视频监控系统

[侯杰 刘双广]

目前,智能移动设备的不断普及和网络视频监控系统的快速发展,人们对视频监控的要求越来越高,手机视频监控不受空间上的制约,满足多元化的要求。文章基于实际项目,提出了一种基于Android平台的警用移动视频监控系统方案。该系统由远程视频采集端、视频流服务器及移动监控终端构成,采用开源的多媒体框架FFmpeg对视频进行H.264编解码,采用RTP/RTCP协议来传输视频数据,并添加人脸、车牌识别等模块。经过测试证明该平台能很好地实现移动视频监控的功能,满足项目需求,服务公安警用实战。

远程监控 Android平台 移动终端 视频编解码

侯杰

重庆邮电大学光通信和网络重点实验室,硕士研究生。主要研究方向:通信新技术应用。

刘双广

重庆邮电大学光通信和网络重点实验室,高新兴科技集团股份有限公司研发中心,高级工程师,硕士生导师。主要研究方向:通信新技术应用。

引言

随着4G时代的到来,移动终端设备的高速智能化发展,各类智能手机操作系统性能不断提高。由Google开发的Android操作系统基于开源Linux系统实现,其中底层采用C语言设计,而应用层采用简便的Java语言进行开发[1]。其免费开源特性促进了智能手机以及平板电脑的快速发展[2],也为无线视频监控提供了很好的软、硬件平台。传统的基于PC终端的网络视频监控系统缺乏一定的灵活性,不能满足用户的移动监控等多元化需要[3]。本文在Android平台上,设计并实现了可运行于多种移动终端的实时视频监控系统。经测试,系统在不同无线网络环境下均获得了较好的实时监控性能,可用于警用监控以及无人值守等领域。

1 系统总体架构和主要模块

基于Android平台的移动视频监控系统以Android智能手机作为视频监控客户端,借助于Android手机的便携性和灵活性等优点,突破了传统视频监控系统在时间和空间上的诸多限制[4],本系统将主要应用于公安系统,实现了随时随地进行视频监控的目标。

视频监控系统主要由视频采集设备(带云台的的网络摄像机)、视频流服务器以及基于Android的移动智能终端(手机、平板)构成,如图1。视频采集设备用来完成现场实时视频的采集与视频H.246压缩编码,然后采用网络接入到Internet,把经过压缩后的视频数据存放于视频流服务器。视频流服务器通过JMF类库(Java媒体框架API)捕获视频,并通过实时传输协议RTP打包,最后利用Socket通信将压缩后的视频发送出去。视频流服务器通过无线网络建立独立的IP地址,便于移动视频监控终端通过Socket请求获取视频数据。移动视频监控终端主要是向远程视频流服务器发送监控请求、视频解压、视频播放及图片保存等功能。客户端在接收到压缩后的监控视频数据后,对RTP包进行解析,然后调用FFmpeg音视频解码库,实现H.264解码,并将解码后得到的视频显示在智能终端界面上,供用户查看。

图1 基于Android的移动视频监控系统模型

(1)视频采集端

全部采用有线的IP摄像头,并通过局域网与当地的子服务器连接。摄像头的类型主要分为云台摄像头和普通摄像头,云台摄像就是带有云台功能的摄像头,可通过远程终端控制摄像头的转动角度、焦距等,此模块主要由镜头和感光元件组成,目前,根据不同的感光元件可以分为CCD和CMOS两种。

(2)流媒体服务器

通过调用第三方SDK的方式获取子服务器上的视频数据,并对传输过来的原始视频数据进行编码,对处理后的视频信息使用流媒体技术进行串流化处理。其主要完成H.264数据的RTP封包工作、与客户端的RTSP会话链接与实时的传输、控制工作。同时该部分还要完成用户信息管理,以及视频的存储和周期性清除等工作。

(3)网络传输

此模块负责将流媒体数据包和控制信息通过以太网进行传输,本文用的无线网络为WiFi网络。

(4)移动终端

采用Android系统的移动终端部分主要实现用户的登录,视频数据的接收、解析、解码、播放等工作,同时支持摄像头的云台控制。

移动视频监控系统总体框架可分为视频巡逻、电子地图、即拍即传、人脸识别、车牌识别、移动案件、语音对讲、图像浏览、告警查看等部分如图2。主要的功能模块需要满足的需求如下:

视频巡逻:是该系统最重要的功能模块,将所有可进行监控信息查看的设备以列表形式展现,用户可根据需要选择相应的设备进行查看,对监控现场进行实时的监控。

电子地图:在地图中对摄像机位置进行定位,便于快速查看。

人脸、车牌识别:通过融入智能算法,可以对手机拍摄的人脸和车牌进行快速识别。

移动案件:通过移动端快速记录案件详情。

图像浏览:系统不仅支持实时的视频监控,而且提供了对历史数据进行查看的功能。用户可通过历史数据查看模块对历史监控数据进行重复查看。

图2 系统框架

2 服务器端软件设计

服务器端在整个监控系统中主要负责原始数据的处理,存储用户数据文件和视频数据的发送,在服务器端视频得处理模块和视频数据的发送模块以缓冲区为纽带,当服务器通过摄像头采集到视频信息,交给数据处理模块进行数据进一步加工编码,然后直接进入缓冲区,在缓冲中的视频数据,当接到来自客户端的请求指令,通过视频发送模块向客户端程序发送。同时关于用户的数据信息也存放在服务器端的数据库中。整个流程如图3。

图3 服务器功能模块流程

2.1视频编码模块

由于摄像头厂商提供的是高清摄像头设备,因此视频采集端采集到的视频数据往往非常大,在网络带宽有限的移动网络中,更是不便于传输。所以,为了视频数据更好地传输,需要将采集端得到的原始视频数据进行压缩编码[5]。

编码模块流程如下:首先利用摄像头厂商提供的SDK,调用相关API,获得原始视频数据。然后对视频数据进行分辨率、码率、帧率的转换,将转化后的视频数据进行H.264编码,服务器端对视频数据的H.264编码使用了X.264开源库函数,编码的过程和函数的作用描述如下:

小学生对于学习还是处于一个很朦胧的状态,这时就应该培养他们对于学习的兴趣。在小学阶段,一切都是从零开始,在教师眼里都具有很强的可塑性,小学生的接受能力、学习能力、模仿能力都很强,这时,教师一定要传递一些正能量让他们往积极的方向发展。

x264_param_default_preset(Param,"fast",zerolatency)用于设置参数初始化,使用zerolatency选项使编码不存在延时。Param-〉i_threads = X264_SYNC_ LOOKAHEAD_AUTO是设置当取到缓冲区为空时,继续使用不会造成死锁。Param-〉i_width和Param-〉i_height是设置编码图像的宽度和高度。Param-〉i_bframe设置流参数等。

x264_picture_alloc(pPicIn,X264_CSP_I420,Param-〉i_ width,Param-〉i_heigh)被用来分配编码所需的内存空间。

Handle = x264_encoder_open(Param)是打开编码器句柄,通过X264_encoder_parameters得到设置给X264的参数,通过X264_encoder_reconfig更新X264的参数。

read_frame_y4mpPicIn,(hnd_t*)y4m_hnd,i)是读取一帧数据,并将其存入内存中。

x264_encoder_encode(Handle,&pNals,&iNal,pPicIn ,pPicOut)是用来获取一帧数据进行H.264编码。

2.2 流媒体模块

该模块对数据进行RTP封包实现实时流媒体传输到客户端手中的Android平台设备[6]。软件程序通过调用socket套接字的listen()方法等待客户端Android平台设备的连接,其间客户端请求获取PC的IP地址与端口号。成功接收到客户端连接请求后,通过IP地址与端口号进行连接,连接成功之后程序提取M-JPEG格式下RTP封包中的单一JPEG帧,计算单一JPEG帧的长度,并保存在Length中。之后对单一JPEG帧的长度进行判断,如果长度小于RTP包长,则进行单一JPEG帧的RTP封包;如果长度大于RTP包长,则进行JPEG帧的分片模式RTP封包。完成JPEG视频帧的RTP封包之后,程序对封装好的RTP数据包进行连续的UDP协议形式的网络发送,直到所有数据发送完成。

3 Android客户端的设计

图4 客户端软件架构

3.1 视频解码模块

对于Android移动终端的解码,无论是通过硬件方式还是软件方式,都很少有支持实时H.264格式视频的解码器[8]。因此为了完成系统的解码工作,首先需要在移动终端移植一个FFmpeg解码库,然后再利用JNI (Java Native Interface)调用解码动态库库对视频数据进行解码处理。目前,开源的H.264标准解码库主要有:JM decoder、T264 decoder、X264 decoder、FFmpeg libavcodec、Intel IPP simple player。其中FFmpeg库的解码速度最快,且兼容性和实时性也较好,因此本系统选择移植FFmpeg库作为客户端解码器。FFmpeg支持MPEG、FLV等40多种编码以及AVI、MPEG等90多种解码。移动终端的硬件资源有限,而且客户端视频解码也只需要H.264格式基础档次的解码库,因此本文从FFmpeg解码库中精简出H.264解码部进行编译,然后将解码库移植到客户端,如图5。

图5 解码库移植流程

3.2 播放实现

本系统的视频播放采用RGB565格式,但解码后的数据为YUV格式,所以在播放前需要进行YUV格式到RGB格式的转换,转换后的图像数据存入播放缓冲区中。然后通过设置定时器(Time类)的方式,使播放线程以固定的频率从播放缓冲区中取出图像,并利用on Draw()方法将图像上屏显示。最后调用canvas.draw Bitmap()函数,自动完成屏幕的刷新。

4 系统测试

本系统在实际应用中使用海康威视公司、大华公司的球形摄像机,客户端采用三部Android 智能手机。

(1)用户登录

客户端的功能测试首先测试用户登录功能,输入正确的服务器的IP地址、用户名和密码之后点击登录按钮,移动设备则向服务器发出登录请求的相关信息,若用户认证通过,则登录成功。当输入的用户名不存在或密码错误时,用户认证不能通过。登陆成功后,如图6。

图6 用户登录界面

(2)监控画面

选择摄像机后进入监控画面,如图7。屏幕中部为监控画面,画面两边显示一些实时的视频参数以及播放控制按键。

图7 监控画面

图8 云台控制

(3)云台控制

点击屏幕右上方的菜单,进行云台控制测试。监控画面下方设置了8个云台控制按钮,用于实现移动终端的远程云台控制功能,测试过程中按住按钮,摄像头则会做出相应移动,松开按钮则停止移动,如图8。

5 结束语

随着智能城市、智能家居等应用的推广,人们对于视频监控的关注和要求越来越高,目前广泛使用的二、三代监控系统在布线成本和灵活性方面的不足已经体现了出来,因此移动视频监控系统具有很好的发展条件和市场价值。本文研究了远程视频监控系统的视频信号采集、视频压缩、与视频数据的无线网络传输,并对视频数据在Android平台的解析与播放做了深入研究。由于系统涉及的技术众多,加上水平和时间限制,因此,在功能拓展、性能优化、视频编解码上还有待改进,以提高系统的实用性和整体性能。

1李向军,张小菲,王书阵.一种基于Android平台的移动终端多媒体播放器的扩展设计[J].微电子学与计算机,2014,31(2):118-121

2胡顾飞,汤文兵,朱成亮.基于Android平台的纹理映射分析与实现[J].中国新技术新产品,2011,(12):33

3梁笃国,张艳霞,曹宁,等.网络视频监控技术与智能应用[M].北京:人民邮电出版社,2013

4杨建全,梁华,王成友.视频监控技术的发展与现状[J].现代电子技术.2006,29(21):84-88,91

5张贺.基于Android平台的智能视频监控系统设计[D].成都:成都理工大学,2015

6魏崇毓,张菲菲.基于Android平台的视频监控系统设计[J].计算机工程,2012,(14):214-216

7裘英,王库.基于 RTP 协议的网络视频监控系统的实现[J].微计算机应用,2006,(4):436-439

8龚虹瑞.基于Android的移动视频监控[D].成都:西华大学,2015

10.3969/j.issn.1006-6403.2016.07.002

2016-07-12)

猜你喜欢

解码客户端编码
《解码万吨站》
基于SAR-SIFT和快速稀疏编码的合成孔径雷达图像配准
《全元诗》未编码疑难字考辨十五则
子带编码在图像压缩编码中的应用
解码eUCP2.0
如何看待传统媒体新闻客户端的“断舍离”?
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
Genome and healthcare
县级台在突发事件报道中如何应用手机客户端