吴 超,章坚武
(杭州电子科技大学通信工程学院,浙江杭州310018)
视频监控系统发展20余年,从最早的模拟监控到前些年的数字监控,再到现在正在蓬勃发展的网络视频监控。视频监控已经不仅仅只是用来维护大众公共安全,也越来越成为维护家庭安全的重要工具[1]。随着网络视频监控的广泛应用,Web客户端的实现方式也多种多样,而本文采用的Applet技术使得客户端具有支持多种主流操作系统,安全性好,易于维护,系统软硬件成本低等优点,非常适合一般个人家庭用户使用。H.264作为新一代的视频编码标准,采用以往成熟的编码技术,在追求更高的编码效率和简洁的表达形式的同时,也提供了非常好的视频质量,是当前最高效的视频压缩方法,在安防行业有着非常大的前景[2]。本文首先介绍基于Applet的网络视频客户端的设计,着重介绍了系统实现H.264解码播放的过程,并就实际开发过程中所涉及的一些关键问题进行讨论。
Applet是采用Java创建的基于HTML的程序,通过〈Applet〉标签嵌套在网页中,当打开一个嵌入Applet的网页时,浏览器将其暂时下载到用户的硬盘上,并当Web页面打开时在本地运行[3]。
Java Applet具有Applet数字签名技术,使得Applet在下载到客户端之前要进行身份认证,只有得到用户的信任才可以下载,用户通过签名者的身份决定是否信任它,认证不通过者不能在客户端进行任何读写操作。因此与目前在网上广泛使用的ActiveX相比,安全性得到很大的保障,更适合用于个人家庭监控系统以及一些安全性要求比较高的环境中。
监控系统由服务器和客户端组成,整个系统的简单流程图如图1所示。
本监控系统的前端设备采用嵌入式系统,包括DM365嵌入式平台、摄像头、云台等。DM365平台负责把摄像头采集到的模拟信号转化为数字信号,然后将其压缩为H.264格式,再以RTP格式打包后发送。监控前端使用嵌入式平台,可使成本变少,适合一般民众的普及,体积较小,便于安装部署。
图1 网络视频监控系统流程图
客户端采用Applet编程,经过数字签名,可以在拥有Java环境的多种浏览器上运行。用户在经过身份认证后可以看到监控现场实时的画面,而且用户还可以进行云台控制,帧数调节等操作。
客户端软件主要实现视频数据的实时接收,解码,播放,以及通过TCP/IP协议对前端发送命令达到对前端云台的控制。软件使用eclipse开发,软件模块如图2所示。
图2 客户端软件模块
用户验证模块和控制模块都是基于TCP连接,当成功连接后,向服务器发送用户名密码,服务器进行判断,登陆成功则得到返回信息“SUCCESS”。之后可以通过控制模块发送一些命令给服务器,服务器会根据接收到的命令进行解析并执行相应的动作。
本设计中,数据的传输是由RTP和UDP一起完成的。UDP协议只是负责数据包的传输而不管数据的传输时间顺序,RTP的数据单元是由UDP来承载的。H.264视频在发送前为一个个NAL单元,每个NAL单元按照RTP格式进行封装后,再以UDP协议进行发送。由于UDP包所能传输的最大数据量为1 472B,而一个NAL单元的大小经常会超过这个数量,所以发送前需要将NAL单元进行拆分后再进行 RTP 打包[3]。
RTP数据包解析的过程就是将接收到的数据包拆包,得到包头中的信息如:负载类型,序列号,NAL单元类型等一些有用的信息,再根据服务器端的打包规则,对数据包进行分类,分为单一NAL单元,分片NAL单元首包,分片NAL单元中间包,分片NAL单元结束包。之后程序根据数据包类型重新组装成完整的NAL单元。
H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式。H.264保留了以往压缩技术的优点和精华又具有其他压缩技术无法比拟的许多优点:(1)低码率:同样图像质量下,数据量只是MPEG4的1/3,非常适合流媒体传输;(2)高质量的图像:H.264可以提供连续流畅的高质量图像;(3)容错能力强:H.264提供了解决网络传输包丢失的问题的工具;(4)网络适应性强:H.264提供了网络抽象层,可以使H.264文件很容易地在不同网络上传输[5]。
由于H.264在Java中没有自带的解码器,所以不能对接收到后经过组装的NAL单元进行直接解码,因此必须寻找第三方的解码库。本设计采用的是开源解码库FFMPEG,但是FFMPEG解码库是使用C语言编写的,Java是不能直接调用的,因此本设计采用了Java中一种关键技术:JNI编程。JNI(Java Native Interface)为Java本地调用。它允许Java代码和C/C++的代码进行交互,进行混合编程。
编译成功后得到3个本地方法:
InitDecoder(intwidth,int height);//初始化解码器,并指定解码视频数据的分辨率;
UninitDecoder();//在退出程序时释放解码器的资源;
DecoderNal(byte[]in,int insize,byte[]out);//实现 H.264 数据的解码,传入 H.264 数据,得到RGB数据。
解码播放H.264视频流程如图3所示。
图3 H.264解码播放流程图
解码成功后得到的是RGB格式的图像象素,之后Java使用自带的图像生成方法,将它生成一帧的图像并显示出来。播放进程中不断地循环这些操作,最后实现视频的流畅播放。
Applet编程需要将程序进行jar打包,并使用Java自带的签名工具对生成的jar包进行签名,最后将Applet嵌在HTML网页中。
最后将生成的HTML网页放入到Web服务器中,客户端在访问时会使用之前生成的密钥对程序进行下载。监控客户端实时监控画面如图4所示。系统服务器发送视频的帧数是15帧,比特率是300kbits。客户端通过如图4浏览器可以进行现场的实时监控,用户可以通过网页上的按键实现云台控制,设防,帧数调节等操作。而且画面比较清晰,播放流畅,延迟在500ms左右,完全达到监控的要求。
图4 监控客户端实时监控画面
本设计为基于Applet的视频监控系统,客户端需要持有软件发布者或者服务器提供的密钥才能正常访问使用,这使得客户端与以往的普通软件相比安全性更高,然而本设计只需要浏览器就可以实现对监控现场的实时监控,这使客户端操作更简便,便于维护。视频编码采用H.264技术,大大降低了数据的传输,同时也因为H.264的容错能力能适应较差的网络环境,这使整个系统的质量得到提升[4]。随着个人家庭对监控需求的增多,监控对隐私安全保护的加强,基于Applet的H.264视频监控系统必定有广阔的市场和良好的发展。
[1] 吕金刚,杨建全.智能视频监控技术的应用与发展[J].通信电源技术,2006,23(5):62-67.
[2] 齐俊杰,胡洁,麻信洛.流媒体技术入门与提高[M].北京:国防工业出版社,2009:71-79.
[3] 方红萍.基于Applet的嵌入式远程监控页面设计[J].湖南工业大学学报,2009,23(5):106-108.
[4] 刘龙飞.基于H.264的Web视频监控客户端设计与实现[J].现代电子技术,2011,34(19):28-30.
[5] 吴杰,吴宁,周阳.基于H.264的网络流媒体播放控件的设计与实现[J].南京师范大学学报,2011,11(4):53-56.