摘 要 本文通过对流媒体技术的研究,利用基于Java的JMF技术,设计并实现了一种C/S网络模式的智能家居视频监控系统。实验结果表明,该系统使用方便、费用低廉,能较好地实现网络视频的实时传输。
关键词 JMF;视频监控;流媒体;实时性
1 引言
随着经济的发展,人们对生活质量也提出了越来越高的要求,舒适、合理、便捷和安全的家居环境正逐步被大众所青睐。视频监控作为家居安防的重要组成部分,也逐步受到人们的重视。
目前许多智能家居视频监控系统的软件设计都是采用VC开发,这种解决方案虽然能较好地实现视频的传输,但它使软件的应用环境对操作系统有很大的依赖性,且可移植性差。Java语言具有跨平台可移植性,在网络上应用广泛而且灵活。Sun公司推出的Java语言的媒体软件开发包JMF(Java Media Framework)使得流媒体应用开发变得简单。基于JMF的优点,笔者设计开发了一个跨平台的智能家居视频监控系统,这个系统开发简单、成本低、跨平台、可移植性好。
2 JMF简介
JMF是SUN公司推出的把音频视频和其它基于时间的媒体数据结合到Java Application 和Java Applet中的应用程序接口(API)。它主要是为了方便在Java语言应用程序和Applet小程序中对诸如视频、音频等时基媒体(Time-Based Media)实时处理的编程,JMF为利用Java平台的特征而专门设计,它支持对媒体的采集、回放、网络流式传输,以及支持多种媒体格式的转换等[1]。JMF包括两个部分:JMF API和RTP API,前者的主要功能是捕捉、处理、存储和播放媒体,后者主要是在网络上传输和接收媒体流。
3 关键问题
3.1 多媒体协议的选择
多媒体数据在因特网上的传输必然涉及到网络多媒体传输协议,其中包括因特网本身的多媒体传输协议,以及一些实时流式传输协议等。只有采用合适的协议才能在不保证QoS(网络服务质量)的网络上进行连续的流媒体传输。IETF已经设计出几种支持流媒体传输的协议,主要有:①用于因特网上针对多媒体数据流的实时传输协议RTP;②与RTP一起提供流量控制和拥塞控制服务、解决网络QoS相关问题的实时传输控制协议RTCP[2]。
实时传输协议(RTP)是一种独立于应用程序的协议规范。RTP协议实际上包含两个相关的协议:RTP协议和RTCP协议。RTP主要用来传输多媒体数据,并通过包头的时间参数配置使其具有实时的特性。它本身并不提供任何保证实时传输数据和服务质量的能力,而是通过提供负荷类型指示、序列号、时戳、数据源标识等信息,使接收端能够根据这些信息来重新恢复正确的数据流。RTCP用来传送监视实时数据传送质量的统计数据。在RTCP包中,含有已发送的数据包的数量、丢失的数据包的数量等统计信息。因此,发送端可以利用这些信息动态地改变传输速率,甚至改变有效负荷类型,实现流量控制和拥塞控制,从而使音频、视频传输达到较好的QoS。
基于以上原因,本系统采用RTP协议对视频实时数据进行传输。
3.2 视频压缩标准的选择
网络带宽是网络软件设计中首先需要考虑的问题之一,开发人员必须在带宽消耗和服务质量之间取得一个恰当的平衡点。在本系统中,视频数据编码格式的优劣是决定带宽消耗的关键;因此应该在保证一定视频清晰度的前提下尽可能地采用带宽占用较低的音视频编码格式。考虑到以上要求,本系统在具体实现时分别采用了H.263作为视频编码格式。H.263是ITU在H.261的基础上开发成功的用作低位率传输的视频编码格式,它吸收了MPEG标准的若干概念和思想,非常适合用作网络多媒体传输。
4 系统的设计与实现
4.1 系统总体框架
系统总体框架如下图1所示。
图1 系统总体框架图
系统硬件包括监控设备、服务器主机、传输网络和客户端四个部分。监控设备主要是指摄像头,用于采集监控现场的视频图像信息,并传输给服务器主机。服务器主机是一台PC机,用于控制摄像头、接收采集信息、编码压缩,并接收客户端的请求,进行网络传输和控制。传输网络主要是指Internet,提供客户端和服务器之间的信息通道。客户端是一台连接到Internet的PC机,它通过网络与服务器主机通信,可以使客户随时观看现场情况。
4.2 系统软件设计
4.2.1 视频图像的捕获
视频捕捉是基于JMF(Java Media Framework)来实现的,JMF是Sun联合Intel、Silicon Graphics等公司共同开发的一套在Java应用和applet中显示和处理多媒体数据的类集合。利用JMF可以很容易地创建、显示、捕获、操作和存储时间媒体的Java应用和Applet[3]。
JMF通过CaptureDeviceManager类的get Device(java. lang.String device Name)函数来返回一个Capture Device Info对象再通过Capture Device Info对象的方法getLocator()返回一个媒体定位器来获得数据源。
4.2.2 视频图像的发送
在JMF中,使用RTPManager类来实现视频实时数据的传输。通过RTPManager传输视频数据的实现步骤为:
(1)产生一个JMF处理器,为每一种RTP格式(视频)设置相应的编码方式。
(2)从处理器中获取输出数据源。
(3)RTP Manager产生一个发送数据流,即以数据源和序号作为参数调用RTP Manager的CreateSendStream()方法。
(4)开始会话传输。
(5)监听ControllerEvent事件控制会话过程。
4.2.3 视频图像的接收与播放
在实时接收网络媒体数据流的应用程序中,实时接收网络媒体数据流是通过javax.media包中定义的各种RTP事件监听器和RTP事件处理类来处理和控制的,使用javax.media包中的Player接口可以播放实时网络多媒体数据流,javax.media包中的处理媒体流的接收完成了整个接收RTP数据的过程。
具体实现利用RTP协议在网络中实时接收并播放媒体数据流的步骤如下[4]:
(1)实现ReceiveStreamListener监听接口,监听NewReceiveStreamEvent事件。
(2)当接收到NewReceiveStreamEvent事件后,通过事件获取接收媒体数据流(ReceiveStream),然后通过接收媒体数据流获取RTP数据源(DataSource)。
(3)将数据源传给Manager.createPlayer()产生一个播放器。
(4)给播放器添加监听器,等到播放器实现后,即可显示播放数据。
5 实验结果
本文所实现的是在JDK1.6+JMF2.1.1e环境下,所运行的点到点智能家居视频监控系统。运行结果如图2、图3所示。
图2 发送端界面
图3 接收端界面
6 结束语
本文通过对JMF和流媒体技术的研究,实现了在Internet环境下,基于Java和JMF技术的智能家居视频监控系统的软件设计。该监控系统的视频压缩与解压缩均采用软件实现,可以降低系统成本,并且由于Java语言的平台无关性,此系统能运行于任何平台。视频压缩编解码采用H.263,并采用RTP协议传输,所以提供了一定的QoS保证,并在实验中取得了令人满意的效果。但是,由于该系统是用Java编程,系统的启动初始化过程稍微长一点,相信随着处理器速度不断提高和Java新的实时编译器和快速虚拟机的推出,Java速度慢的问题将被会有效解决。
参考文献
[1] 彭波.Java多媒体技术[M].北京:清华大学出版社,2005:218
[2] 王彦丽,陈明,陈华,王旭仁.基于RTP/RTCP的数字视频监控系统的设计与实现[J].计算机工程与科学,2009(03):58
[3] 刘宏飞.基于JMF的视频医疗系统的设计与实现[D].硕士学位论文,西北大学,2004
[4] 飞思科技产品研发中心.Java2应用开发指南[M].北京:电子工业出版社,2004 |