基于 JMF 的多人视频聊天软件的设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

0引言
随着计算机网络技术的发展,基于网络的各种多媒体传输技术开始得到广泛的应用,多人视频聊天亦逐渐受到大家的青睐。

一直以来,由于视频聊天传输数据量大和网络带宽有限之间的矛盾,使得视频聊天受到很大的制约,传输模式多局限于“一对一”的两人对话,而“一对多”或“多对多”的多人视频聊天或群体视频聊天功能仍限于文本方式。

随着宽带网络的普及,多人视频聊天正逐渐在成为IM (instant message )工具的必备功能,成为网络多媒体技术的一项重要应用。

Java 语言具有跨平台可移植性,具有应用广泛、灵活等特性。

JMF 是Java 的扩展,它以一种跨平台的设备独立的方式支持Java 应用对音频、视频设备的访问,同时支持用连续的方式对语音或视频进行处理。

本文将重点介绍利用JMF 设计开发多人视频聊天软件。

1JMF 和RTP
Java 媒体框架JMF (java media framework )是一个把音频、
视频和其它基于时间的媒体结合到Java 程序和Applet 中的应用程序接口。

它是特为利用Java 平台的特征而设计的,它使Java 程序具有很多新功能:捕捉音频和视频信号,存储、播放
并处理多媒体数据,并能够传输多媒体数据和对多媒体数据格式进行编码。

它还支持压缩的媒体流及存储媒体的同步、控制、处理和播放。

JMF 可以满足用户对媒体数据操作的各个层次的要求。

开发者利用JMF 不仅可以播放媒体数据,还可以对原始媒体数据进行特殊的处理,或者优化对现有格式的处理,或者使用新的播放机制,甚至无缝的扩展JMF 来支持特殊的或新的媒体类型格式。

JMF 的高层体系结构如图1所示。

流媒体在IP 网络上传输时往往采用基于UDP 的实时传输协议(real time protocol ,RTP )。

RTP 协议是专门为交互式语音、视频、仿真数据等实时多媒体应用而设计的轻型传输协议,它为应用程序传送和接收实时数据提供了端到端的网络传输功能,其数据传输通过实时传输控制协议(RTCP )来增强。

收稿日期:2006-04-21E-mail :sunkuicumt@
作者简介:孙奎(1981-),男,江苏睢宁人,硕士研究生,研究方向为网络技术、流媒体技术;殷兆麟(1945-),男,江苏泰兴人,教授,硕士生导师,研究方向为代理技术、现代软件工程、网络技术。

基于JMF 的多人视频聊天软件的设计与实现

奎,殷兆麟
(中国矿业大学计算机学院,江苏徐州221008)

要:多人视频聊天软件是网络环境与网络技术发展的产物,具有很高的应用需求和广阔的应用前景。

JMF (Java 媒体框架)是Java 语言的扩展,专门用来处理时基媒体数据和实时媒体流。

通过介绍JMF 应用编程接口的结构特点,详细阐述了当前Internet 网络多人视频聊天软件的工作原理、关键技术,及其基于JMF 的具体实现。

该软件具有跨平台可移植性。

关键词:Java 媒体框架;实时传输协议;流媒体;多人视频聊天;音频/视频中图法分类号:TP393.09
文献标识码:A
文章编号:1000-7024(2007)09-2196-03
Design and implementation of multi-video chat software based on JMF
SUN Kui,
YIN Zhao-lin
(College of Computer Science,China University of Mining and Technology,Xuzhou 221008,China )
Abstract :Multi-video chat software is the result of the development of net environment and net technologies,it has a high needs and a wide use foreground.JMF (java media framework )is the extension of Java language,it especially works on the time-based media and real-time media streams.By introducing the characteristics of JMF API,the principle of work and the key technologies about current multi-video chat are presented,the implementation based on JMF is introduced in detail.This software enables cross-platform and trans-plant.
Key words :JMF (java media framework );RTP (real-time transport protocol );streaming media;multi-video chat;
audio/video
图1JMF 的高层体系结构
Demultiplexer Java Application,Applets,Beans JMF Presentation and Processing API
JMF Plug-In API
Codecs Effects Multiplexer Renders
2007年5月计算机工程与设计
May 2007
第28卷第9期Vol.28
No.9
Computer Engineering and Design
RTCP 与RTP 一道工作,负责监视数据传输,并提供一些控制和识别功能,如流量控制和拥塞控制服务等。

RTP 和RTCP 独立于传输层和网络层,JMF 提供了实现RTP/RTCP 协议的API 。

JMF RTP API 是JMF 中支持RTP 应用开发的应用程序接口,在JMF 的高层结构中,RTP API 位于JMF API 和插件结构Plug-in API 之间。

JMF RTP API 可以无缝地与JMF 的获取、回放及处理功能一起工作。

同处理其它媒体内容一样,Player 和Processor 对象用来回放RTP 媒体流。

用户可以将采集和保存的媒体数据以RTP 媒体流的形式在网络中传输,同样还可以扩展JMF 以支持其它RTP 格式。

JMF 中,RTP 媒体流包括捕获的实时媒体流和已存盘的文件媒体流,利用RTP API 可以将捕获的实时媒体流在本地机存盘,也可以通过计算机网络发送捕获的实时媒体流或已存盘的媒体流。

远程机从网络接收来的RTP 流,可以将其保存为文件或播放。

RTP 媒体流的发送和接收如图2和图3所示。

2
软件设计与实现
2.1
工作原理
在当前的网络带宽条件下,多人视频聊天(10人以内)适
宜采用P2P (peer to peer )方式传递音、视频信息,即用户通过俩俩建立RTP 会话来相互传送和接收音、视频。

这种模式下,每个客户机要向其他的所有用户上传并下载音、视频;而对人数更多的群组聊天室,则适宜采用C/S (client/server )的模式传送和接收视频。

即首先每位客户机通过与服务器端建立RTP 会话,将自己的音、视频信息发送到服务器,然后服务器再将接收到的音、视频数据统一发送到其它各客户机。

这种模式下,每个客户机只需向服务器上传自己的音、视频即可,这样就节省了很多的上传带宽,当然这也会增加服务器的下载负担。

在现实生活中,根据某些应用(如视频会议)的实际需求,有时我们还可以采用P2P+C/S 的模式。

由于视频会议在进行的时候,一段时间内只播放部分成员(发言人)的音、视频,因此,只需这一部分的成员向服务器发送他们的音、视频信息,节省了大量的上传带宽。

与此同时,参会人员还可以在下载音、视频数据的同时开启数个“私聊”通道,与其他成员进行视频聊天,而这种“私聊”又是采用了P2P 的方式。

这种依据我国带宽特点的传输方式,很好地将P2P 传输与服务器转发模
式结合起来,为同类软件的设计提供了新思路。

(1)P2P 工作原理
P2P 是一种对等的端到端多媒体通信,如图4所示。

从摄像头采集到的视频图像通过视频捕捉卡送入计算机,从麦克风采集到的音频信号,通过声卡送入计算机。

这些多媒体信息经过编码压缩后封装到RTP 数据包中,然后使用RTP 协议发送到对方计算机。

对方计算机接收到后,经过解码解压缩等处理,分别通过监视器和耳机进行显示播放。

(2)服务器转发工作原理
服务器转发是指客户机将自己的音、视频数据上传到服务器,服务器对接收到的数据进行适当的处理,并分别传送给其它客户机。

此外,服务器转发的同时,用户可以有选择的进行“私聊”(图5中虚线),即将P2P 传输与服务器转发结合起来,这样可有效利用带宽。

2.2软件实现
多人视频聊天必然要求实现音、视频数据的实时传输及
图像声音的清晰回放,要达到这样的要求,音、视频数据的采集和压缩、数据的传输和控制以及数据的接收和播放等技术都很关键。

2.2.1双缓冲多线程技术
软件的视频压缩算法是最耗(CPU )时间的,为了尽可能的
提高压缩的效率,提高CPU 的使用效率,本软件采用了双缓冲和多线程等技术,使得图像的采集、压缩和传输可以并发执行,从而提高了软件的整体性能。

在图6中,视频采集线程将从视频捕获卡上采集的各帧视频图像分别存放到视频源缓冲区1和视频源缓冲区2,JMF 软件压缩线程则分别将视频源缓冲区1和视频源缓冲区2的图像进行压缩,并把压缩后的图像分别保存到压缩视频缓冲区1和压缩视频缓冲区2。

视频采集线程等待两个视频源缓冲区中至少有一个为空时才进行采集,JMF 压缩线程则等待视频源缓冲区至少有一个为满并且压缩视频缓冲区至少有一个为空时才进行压缩。

所有使用压缩后的视频数据的线程排成一个队列,它们可以同时使用非空的压缩视频缓冲区的视频数据。

当最后一个线程使用完压缩视频缓冲区后,向视频
图2RTP 媒体流的发送
文件
计算机
网络
数据汇集器
通道管理器
数据源
处理器
文件
捕获设备
数据源
数据源数据汇集器
图4P2P 工作原理
网络用户1
用户2
摄像头麦克风
耳机
监视器
视频
捕捉卡声卡显卡
视频、
音频数据流主机视频、音频
数据流
图5C/S 工作原理
客户机4
客户机3
客户机1
客户机2
服务器
上传音视频
下载音视频
上传音视频下载音视频
P2P
采集线程发出采集下一帧的命令。

从缓冲区中取走数据,将缓冲区的状态置空,向缓冲区中放入数据,将缓冲区的状态置满。

视频的解压缩也是采用了多线程技术。

音频数据的采集压缩和解压缩过程类似于视频。

2.2.2捕获音、视频数据
利用JMF 从当前活动源中捕获时基媒体。

例如,音频能
够从麦克风捕获,利用视频捕获卡能从摄像机捕获视频。

JMF 中负责管理所有音、视频等捕捉设备的类是CaptureDevice-Manager (捕捉设备管理器),它采用登记和查询机制来定位捕捉设备,并能返回一个代表捕捉设备CaptureDeviceInfo 对象。

CaptureDeviceManager 类提供了两种方法来创建捕捉设备Cap-tureDeviceInfo 对象:
(1)getDeviceList (Format format )方法,该方法返回一组支持捕捉指定格式数据设备的CaptureDeviceInfo 对象。

(2)getDevice (String DeviceName )方法,该方法返回指定名称的捕捉设备的CaptureDeviceInfo 对象。

处理器Processor 对象是用来设置和控制音、视频捕捉设备采集媒体数据的。

通过调用CaptureDeviceInfo 对象的get-Locator 方法创建MediaLocator 对象,然后以此对象为参数调用管理器的createProcessor 方法,即可创建Processor 对象。

当然,也可以先利用MediaLocator 创建一个数据源(DataSource ),再以此DataSource 为参数调用管理器的createProcessor 方法来创建Processor 对象。

配置处理器对象,首先要为处理器对象的通道设置采集参数。

方法是:调用处理器对象的getTrackControls 方法,得到通道的TrackControl 对象,然后调用TrackControl 对象的setFor-mat 方法设置通道的采集参数;其次,要设置处理器对象的数据输出格式。

方法是:调用处理器对象的setContentDescriptor 方法来设置。

处理器对象配置后,就可以调用getDataOutput 方法产生数据源。

所以,捕获媒体流,可分为以下几个步骤:步骤1调用JMF 类CaptureDeviceManager 查询所需要的捕获设备,获得可利用的捕获设备CaptureDeviceInfo 对象;步骤2
从CaptureDeviceInfo 对象中获得一个媒体定位
器(MediaLocator ),并且利用这个媒体定位器创建一个数据源(DataSource );
步骤3
利用数据源创建一个播放器或者一个处理器,但
如果明确需要存储捕获的媒体流或对其进行相关处理,则只能创建处理器,并配置处理器;
步骤4启动播放器或处理器开始捕获媒体数据的过程。

2.2.3音、视频数据的传输
在网络上传输RTP 流,必须使用处理器和RTP 编码的数
据源,并构建数据汇集点(DataSink )或会话管理器(SessionMa-nager )来控制传输。

・利用带有RTP 会话(RTP Session )参数的MediaLocator 构建RTP 数据汇集点(Manager.CrcateDatasink (DataSource,Media-Locator ))。

・用会话管理器为传输内容创建传渝流,并控制传输。

如果利用MediaLocator 来构建RTP DataSink ,则只能传输Data Source 中的第一个流,而且无法监控会话状态。

若希望在一个会话中传输多个RTP 流或监控统计会话,则需直接使用SessionManager 。

在本软件中,使用会话管理器传输音、视频数据流。

方法如下:
(1)创建会话管理器对象;
(2)调用initSession 方法初始化会话管理器对象;(3)调用createSendSteam 方法为指定的SourceStream 创建输出流对象SendStream ;
(4)调用startSession 方法启动会话管理器;
(5)通过调用输出流对象的start ()等方法启动并控制传输进行,在SendStream 上注册一个SendStreamListener 。

2.2.4音、视频数据的接收和播放
音、视频数据的接收端需要设置缓存,这是因为因特网采
用的是以包传输为基础的异步传输机制,数据是封装在数据包中的(一帧图像数据封装在多个数据包中)。

由于网络是动态变化的,每个数据包选择的路由可能不尽相同,所以到达接收端的时间延迟也就不等,甚至先发的数据包还有可能后到。

为此,使用缓存来弥补延迟和抖动的影响,并保证数据包的顺序正确,从而使媒体数据能连续输出,而不会因为网络暂时阻塞使播放出现停顿。

接收和播放音、视频数据也有两种方法:①利用带有RTP 会话(RTP Session )参数的MediaLocator 创建一播放器(Mana-ger.createPlayer (MediaLocator ));②使用会话管理器(Session-Manager )建立会话,传递从数据流中提取的DataSource 给Mana-ger.createPlayer (DataSource )来为一ReceiveStream (接收到的数据流)构建播放器。

如果利用MediaLocator 来构建播放器,仅可以播放在会话中检测出的第一个RTP 数据流。

如果要回放会话中多个RTP 数据流,则需要直接使用SessionManager 并为每一接收到的数据流(ReceiveStream )构建播放器。

使用会话管理器接收和播放音、视频数据流的方法如下:(1)建立RTP Session ;①建立一个SessionManager (会话管理器)。

例如,创建一个com.sun.media.rtp.RTPSessionMgr 的实例(RTPSessionMgr 是一个用JMF 参考工具提供的SessionMa-nager 工具);②调用类RTPSessionMgr 的成员数addReceive-StreamListener 注册为一个listener (听众);③调用类RTPSes-sionMgr 的成员函数initSession 初始化RTP 会话;④调用类RTPSessionMgr 的成员函数startSession 开始RTP 会话;
(2)在ReceiveStreamListener update 方法中,监视NewRe-ceiveStreamEvent 事件,它会指示新的数据流被检测到;
(3)当一个NewReceiveStreamEvent 事件被检测到时,从NewReceiveStreamEvent 事件调用getReceiveStream ,以取得Re-ceiveStream ;
(下转第2208页)
图6视频线程采集和压缩
采集下一帧获取一帧压缩后的视频
压缩视频缓冲区1压缩视频缓冲区2
软件压缩线程
视频采集线程
视频捕获卡
数据流
消息视频源
缓冲区1
视频源缓冲区2
要是增加查询的限制条件,从而快速准确达到所需目标信息。

(3)信息浏览模块:主要阐述本网站的相关信息,以及使用方法同时设置使用导航。

(4)用户管理模块:采用双层管理用户权限,并设置专门的管理页面。

该模块可对各种类型用户的具体信息进行管理,可以添加、修改、删除、注销用户,不同类型的用户都分别有自己的上级或下级用户,他们的关系决定数据流的方向。

(5)日志管理模块:所有用户的访问操作进行记录,使管理员可以及时了解用户对本系统的使用情况并定期对历史信息进行清理。

(6)数据备份模块:信息备份功能,在高级管理员权限下,对目前系统数据进行导入、导出操作。

5数据库的维护和更新
5.1系统特点
本系统采用最新技术构建(.NET统一的存储过程调用方法[8]),保证其先进性,多种安全措施保证其安全性,系统架构灵活可变,易于升级,系统集中设计模式易于管理和维护,人性化界面设计,操作简单方便,不需安装任何软件。

最大的特点是资源共享,方便动物遗传资源的保护和持续利用。

5.2系统安全
(1)系统权限管理:采用直接判断法[9]对不同权限的用户进行管理,用户权限控制分为两层:①据不同用户的不同权限,在系统功能菜单之前判断用户级别,由服务器端的session变量实现;②对某个数据级操作按钮发出请求时,再次判断用户的权限。

(2)其它:通过管理防火墙和网关路由器的访问来控制链表,控制对网络资源的访问;通过接受与被管对象安全相关的事件报告;通过定期探测系统的安全漏洞并给出补救建议。

6结束语
动物种质资源信息系统的建立,对发展我国农业科学具有极高的实用价值和理论意义,可以实现国家对动物资源信息的集中管理,克服资源数据的个人或单位占有,互相保密封锁的状态,使分散在全国各地的种质资料变成可供迅速查询的种质信息,为农业科学工作者和生产者全面了解作物种质的特性,拓宽优异资源和遗传基因的使用范围,培育优质、抗病、抗不良环境新品种提供了新的手段,为动物遗传多样性的保护和持续利用提供了重要依据,使我国动物种质信息管理达到世界先进水平。

但值得提出是,Internet环境下的数据库查询处理如通过缓存机制来提高查询效率、通过查询优化算法进行动物遗传资源的共享和版权的平衡需深入研究和完善[10]。

参考文献:
[1]叶青,刘鹏.高校图书馆电子网络资源的整合与利用[J].广西医
科大学学报,2004,21(1):215-216.
[2]陶树平,李华伦.数据库系统原理与应用[M].北京:科学出版社,
2005.
[3]魏峥,王军,王德亮,等.Visual 程序设计教程[M].北
京:清华大学出版社,2005.
[4]范永全,张俊兰.基于和XML的网络考试系统[J].计
算机工程与设计,2006,27(8):1472-1476.
[5]郑阿奇,刘启芬,顾韵华,等.SQL Server教程[M].北京:清华大学
出版社,2005.
[6]陈伟生,徐桂芳.中国家畜地方品种资源图谱[M].北京:中国农
业出版社,2004.250-318.
[7]徐桂芳,陈宽维.中国家禽地方品种资源图谱[M].北京:中国农
业出版社,2003.164-266.
[8]刘志波中统一的存储过程调用方法[J].计算机应用,
2003,23(11):153-154.
[9]暴志刚,胡艳军,顾新建.基于Web的系统权限管理实现方法
[J].计算机工程,2006,32(1):169-170.
[10]张德,董逸生.Internet上的数据库联合查询优化[J].计算机学
报,2000,23(2):171-176.
(上接第2198页)
(4)从ReceiveStream调用get DataSource取得RTP Data-Source,这是一个具有RTP特定格式的PushBufferDataSource;
(5)传递DataSource到Manager.createPlayer以便创建一个播放器。

3结束语
立足于实际的应用需求,结合当前生产生活的实际情况,本文介绍了Java媒体框架应用编程接口JMF的结构特点,阐述了多人视频聊天软件的工作原理,及其基于JMF的具体实现。

所开发的软件具有成本低、节省带宽和跨平台可移植性的优点。

随着宽带网络的进一步发展和JMF技术的成熟,基于JMF的多人视频聊天软件势必会有非常好的应用前景。

参考文献:
[1]Java Media Framework[EB/OL]./products/
java-media/jmf/index.jsp.
[2]殷兆麟.Java语言程序设计[M].北京:高等教育出版社,2002.
[3]殷兆麟.Java网络应用编程[M].北京:高等教育出版社,2004.
[4]彭波,孙一林.Java多媒体技术[M].北京:清华大学出版社,2005.
[5]孙一林,彭波.Java网络编程实例[M].北京:清华大学出版社,
2003.
[6]吴国勇.流媒体技术与应用[M].北京:北京邮电大学出版社,2001.
[7]戚伟世,杜刚,蔡安妮,等.基于视频内容的多媒体网络接纳控
制[J].计算机工程与设计,2005,26(4):1036-1037.
[8]朱攀蓉,姜红梅,翟正军.机载多路数字音视频记录系统的设计
与实现[J].计算机工程与设计,2006,27(3):393-395.
[9]刘宏飞.基于JMF的视频医疗系统的设计与实现[D].西安:西
北大学,2004.
[10]周静,邹北骥.利用JMF实现RTP流的传输与播放[J].湖南大
学学报(自然科学版),2003,30(3):186-188.。

相关文档
最新文档