赵娟++李倩伟
【摘要】本文主要基于Java 和JMF 技术,设计并实现了远程视频监控系统。该系统是基于java 语言开发的,具有移植性好的特点,系统包括远程监控模块和本地模块。本文对整体模型、本地模块和远程模块的设计思想与代码进行了详细分析。经过测试,该系统实现了远程监控的功能,视频流畅,画面清晰,达到了预期的效果。
【关键词】Java 媒体框架;流媒体;RTP 协议
中图分类号:TN948.63
1引 言
在人类社会进入信息化社会的今天,电信网络和计算机网络的发展极大地改变着全社会人们的生活方式。接入网宽带化的发展推动了新业务需求的产生和发展。远程监控就是其中之一。此技术大多用于网络管理软件等远程控制软件上。此技术的应用使得客户端能够对服务端进行远程的监控。 然而,现在普遍的远程监控软件只是从服务端传送一张屏幕的图片,只能观察到截取屏幕时屏幕一瞬间的情况,并不是一种实时的远程监控,而本例中所实现的远程监控技术是一种实时的远程监控技术。
由于JMF是一种基于java独立的多媒体框架,它的特点使得实现本实例中的远程监控与一般的实现方法是完全不相同的,在功能上也要比传统的强大很多,下面将详细介绍如何实现基于JMF下的远程监控技术。
2关键技术
2.1 Java媒体框架
JMF即Java Media Frame,是基于java的多媒体框架,JMF为 java实现了一种抽象机制,向开发者隐藏了实现的细节,开发者利用它提供的接口可以方便的实现强大的功能。
JMF 实际上是Java 的一个类包,它提供了先进的媒体处理能力,从而扩展了Java 平台的功能。它的主要功能包括:媒体捕获、压缩、流传、回放,以及对各种主要媒体形式和编码的支持,如M-JPG、H.263、MP3、RTP/RTSP(实时传送协议和实时流转协议)、Macromedias Flash、IBM 的HotMedia 和Beatniks 的Rich Media Format(RMF)等。JMF2.11 还支持广受欢迎的媒体类型,如Quicktime、Microsofts AVI 和MPEG-1等。
在开发 JMF 应用程序之前,必须先了解JMF 的体系架构、接口和类。JMF 系统架构与家用摄像机系统相似。首先,用摄像机拍摄内容,拍摄下来的内容录制在DV 带中。DV 带可以放在放像机里播放、放像机提供视频信号给电视机,提供音频信号给音箱,这样我们就可以在电视机上看到画面,从音箱听到声音。JMF API 提供了同样的模型。
2.2传输中技术
在JMF中,使用RTP协议来接收和传输多媒体数据的,RTP是一种针对多媒体的一对一或一对多的传输协议,RTP会话将多媒体数据分作一系列的数据报来传输,这些从特定的数据源发出的数据包就组成了RTP数据流,这种多媒体数据流是一种实时数据流,即当客户端以实时流的形式接收媒体数据时,它可以不用等待所有的数据接收完毕,就可以开始播放,这是实时流的最大优点。而本例中也用到了这一优点来实现该技术。
2.3实现描述
由于是远程监控,即程序要分为两部分,一部分是服务端(Server端) ,另一部分是客户端(Client端)。服务端负责截获屏幕图像,并传输媒体数据 。客户端负责控制服务端并接收和播放媒体数据。
客户端与服务端的连接是由套接字(Socket)连接和RTP连接来实现的。
套接字连接负责传输通讯信息及图片数据,例如:RTP会话端口,媒体格式,图片起点位置,高度宽度等。实现远程通知服务端开始或停止截屏等功能。服务端套接字,使用多线程技术,提供多个用户连接。
RTP连接则实现了媒体实时数据流传输的功能。
两个连接的关系可看作,套接字连接把RTP连接包装起来。Socket先建立客户端与服务端的连接,之后再调用内部的RTP连接进行媒体数据传输。流程如下图1:
核心技术可分为以下几个机制,即:截屏机制,传输实时数据流机制,接受数据流并播放机制,下面将详细分析这几个机制。
图1
3.系统实现过程
3.1 传输实时数据流机制
整个流程可分为以下几个步骤
a. 根据客户端发送的图片信息,构造一个媒体定位器
b. 通过媒体定位器获得数据源
c. 根据数据源产生一个处理器
d. 通过处理器得到相应的传输轨道
e. 设置轨迹支持格式为RTP并检查传输的媒体格式是否为RTP协议所支持的格式
f. 通过处理器获取输出数据源
g. 为每一个轨迹构造一个RTP管理器
h. 利用目标的IP地址与端口构造发送端的RTP会话,并赋给RTP管理器
i. 数据流传送给客户端
RTP协议支持两种图片格式,分别为H.263格式和JPEG格式, H.263只支持三种图像大小352*288,176*144和128*96像素。JPEG格式需要图像的宽和高是8像素的整数倍。因此想要屏截取图像的话,就要使用JPEG格式来传输,缺省情况下,图片格式为H.263。
3.2 截获屏幕机制
在截屏的时候,屏幕的数据将作为一种新的数据源,为此,在应用RTP协议完成图像的传输前,需要先创建数据源,使屏幕图像数据作为RTP标准数据源的一种,通过继承javax.media.protocol包中的pushDataSouce類来实现创建新的push数据源类型,从而实现pushSourceStream接口来实现和管理数据源流。
创造新的数据源需要对JMF的数据源进行扩展 ,需构造一个具有以下形式的类名:endprint
.media .protocol .DataSource
在本系统中该类的类名为com .sun .media .protocol .screen.DataSource ,完全按照创建数据源的结构原则构造的,其中“com.sun”(包前缀),“screen”(协议)。因为媒体定位器定位媒体时,需要使用相应的协议名,DataSource为数据源。
在本系统中,是由DataSource和LiveStream两个类实现,LiveStream类实现实时的截屏数据采集,它从媒体定位器中得到屏幕图像截取的起点位置尺寸等参数在实现了数据流的连接以及获得到开始通知后,开始以设定的频率取得屏幕区域图象(RGB格式),传输给数据缓冲区,形成“推”数据流。
LiveStream类中实现截取屏幕图像部分代码如下(关键语句):
…………
buffer.setFormat( rgbFormat );
buffer.setTimeStamp( (long) (seqNo * (1000 / frameRate) * 1000000) );
BufferedImage bi = robot.createScreenCapture(new Rectangle(x, y, width, height));
bi.getRGB(0, 0, width, height,(int[])outdata, 0, width);
…………
DataSource类是控制LiveStream类的对象实现的一种新的数据源,DataSource把LiveStream采集到的图像作为实时数据源。DataSource类中的getStreams( )实现了PushBufferDataSource类的抽象方法,而getContentType() , connect()等则重载了Controls接口的getControls(),getControl()方法。
4.编程细节
本文设计的系统由客户端程序和服务器端程序两部分构成。服务端程序安装在远端计算机上,实现视频的截取与传输,客户端程序安装在本地计算机上,实现视频流的接收与播放。该系统的硬件包括相互联网的远端计算机,本地计算机和一个普通的视频头。该视频头安装在远程计算机上,实时的截取远端图像,并生成视频媒体流。远端计算机对视频流进行处理后通过网络向本地计算机发送视频流,本地计算机接收到视频流之后,在本地计算机的屏幕上显示出来。
4.1 接收机制与播放机制
接收机制与播放机制主要用到了RTP监听器,即用于监听RTP事件的接口,如本例中用到了SessionListener接口 , ReceiveStreamListener接口 , ControllerListener接口。
监听器用来接收作为一个整体的RTP会话的状态改变消息,例如,RTPEvent类以及其子类SessionEvent,ReceiveStreamEvent,SendStreamEvent,ControllerEvent等。
SessionListener监听器用来接收作为一个整体的RTP会话的状态改变消息,例如在监听到新的参与者时,并把它添加到RTP会话中,该接口通过实现update()方法可以监听到SessionEvent。
ReceiveStreamListener监听器用来监听正在接收的RTP数据流的状态消息,该接口中的update()方法可以监听到ReceiveStreamEvent事件。
ControllerListener接口用于处理控制器(Player,Processors等)对象产生的事件的一个异步接口。通过使用该接口,能够实现播放器潜在的耗时操作的计时管理,例如预取操作。该接口中的controllerUpdate()方法可以监听到ControllerEvent事件。
该监听器工作机制如图2:
图2
接收机制与播放机制实现流程如下:
a. 实现ReceiveStreamListener監听接口,监听NewReceiveStreamEvent事件。
b. 接收到NewReceiveStreamEvent事件后,接收媒体数据流,之后通过媒体数据流获取 RTP数据源。
c. Manager.creatPlayer()根据获得的数据源产生一个播放器。
d.为播放器添加监听器,等到播放器实现后,即可显示播放数据。
4.2结果
由于JMF多媒体框架及其RTP协议的特点,使得传输到客户端的图像成为了一种动态数据流,该数据流再由JMF特有的媒体播放器来播放,使得本例中实现的远程监控技术与一般的远程截屏技术,存在着一定的差别。
截屏图像频率可设定在每秒1至30帧,经测试,当频率设定较高时,可使服务端的屏幕活动与客户端接收到的屏幕活动同步,达到了真正意义上的远程实时监控。
由于图像可为两种格式,客户端可设置图像的大小,同时图像位置和传输速率可以在一定范围内随意设定。因此,用户可以根据网络硬件条件来实现远程监控,从而达到最理想的效果。(结果如右图)
5结论
本文研究了基于JMF的远程监控技术,并解决了实现过程中的关键问题。本监控系统包括远程和本地模块,实现了远程的视频监控功能 。在实现时结合了多种技术:视频采集与捕捉技术、流媒体的传输技术、网络编程等技术。本文通过对JMF和RTP视频传输协议的研究,并结合具体的项目,探讨并实现了JMF技术实现视频的传输,并将其作为该远程视频监控系统的网络传输模块。本视频监控系统使用方便,费用低廉,具有跨越多种主流操作系统和适应较低带宽的特点,经测试,视频流畅,画面清晰,实现了预期的功能。
参考文献:
[1]。赵立波. 基于 IP 的视频传输技术浅析.内蒙古石油化工,2008 年10(期):69-70.
[2] .Network Working Group,RFC3550:RTP: A Transport Protocol for Real-Time Applications, July 2003
[3].jmf solution page http://java.sun.com/products/java-media/jmf/2.1.1/formats.html
[4]. JMF 2.0 API Guide,http://java.sun.com/products/java-media/jmf/2.1.1/guide/JMFIX.html
[5] .Alfred C. Weaver,Monitoring and control using the Internet and Java,Digital Object Identifier,2001
作者:赵娟,女,1980年生,硕士研究生,研究方向计算机软件技术endprint