基于JMF和GROUP远程视频会议的设计与实现
2011-02-09李毓丽
李毓丽
(广州大学 华软软件学院 网络技术系,广州 510990)
0 引言
目前国内外软件视频会议系统解决方案基本是通过网络即时通讯技术,实现基于互联网的视频、声音、文字、文件的即时通讯服务,在网上实现人与人面对面交流。客户端传输数据到服务器,服务器统一处理后再传输到客户端,加大服务器的带宽压力。另外,会议系统基本都是基于WINDOWS操作系统,能摆脱平台依赖的会议系统简直就是凤毛麟角。
总的来说,目前软件视频会议系统的主要不足在于:1)基于网络单播;2)没有提供跨平台功能;3)没有提供多国语言支持功能。为了实现一款跨平台、支持多国语言及基于网络组播视频会议系统需要解决以下的问题:
1)如何实现音视频数据的捕获、播放、存储、传输前编码、组播传输
2)如何实现聊天文字、白板信息的组播传输及在线用户信息对象的同步
3)如何实现平台无关性
本文从中小规模企业对视频会议系统的实际需要出发,提出并实现了一个基于JMF和JGROUP的视频会议系统原型。由于JAVA语言本身跨平台特性,本系统还具备大多同类软件所不具备的强大的可移植功能。另外,JAVA语言对国际化的大力支持,本系统还具备了支持多种界面文字语言的功能。加之应用了多播技术、高效的编码格式和简捷稳定的信息传输机制,本系统在测试中体现出了较高的性能和稳定性。
1 实现捕获、播放、存储、传输前编码、组播传输音视频数据
JMF(Java Media Framework)是Sun 公司提出的Java 媒体架构。它是对应Java 2平台标准版(J2SE)的一种可选用的应用编程接口(API)。JMF所提供的多媒体功能如下:1)可以在Java Applet和应用程序中播放各种媒体文件。它提供了对各种主要媒体形式和编码的支持,如JPEG、H.263、MP3、Macromedias Flash。JMF 2.1.1 还支持多种媒体类型如Quicktime、MOV、Microsoft AVI和MPEG-1。2)在互联网上传输音频和视频数据流。3)可以利用摄像机一类的设备截取音频和视频并保存为多媒体文件。4)处理多媒体文件转换文件格式。5)在互联网上广播音频和视频数据。JMF主要由两大部分构成:JMF API和JMF RTP API。前者是JMF的核心,负责对媒体的基本操作;后者则属于前者的扩展,用于RTP媒体流的发送与接收。JMF 针对RTP 的媒体传输类型相当有限,只有一种内容描述(ContentDescriptor)RAW_RTP。JMF所支持的RTP 负载类型也非常有限,如表1 所示。
表1 JMF 所支持的RTP 传输FORMAT
基于JMF 的RTP/RTCP传输模型的整体设计如图1所示:
图1 基于JMF 的RTP/RTCP传输模型的整体设计示意图
1.1 利用JMF实现系统的技术难点及解决方案
1.1.1 降低网络带宽
网络带宽是视频软件设计中首先要考虑的问题。本系统采用组播方式代替传统的单播方式。组播的源和目的地是一对多的关系,并且该用户同一组播地址的用户才能接收到。组播允许路由器在分支处将数据包复制到多条链路上,因此发送方只需发送一个数据包即可让该数据包被同一组播地址的用户所接收,每个用户就不再需要为向其他用户发送/接收数据包而一一建立链接,大大降低用户所需带宽。以最低带宽需求为例:视频采用h263/rtp格式、160×120分辨率、10帧/秒需带宽为60kb/s ,音频采用G723/rtp、单声道、8位采样格式所需带宽为5kb/s。以目前家庭ADSL宽带1M的带宽,完全能实现16人同时参加视频会议。
1.1.2 对来自同一硬件的音/视频数据流同时进行播放、
编码后存储及编码后发送
JMF可捕获来自于硬件的多媒体数据并创建数据源,并且JMF Manger类提供了createCloneableDataSource(数据源对象)方法,创建一个新的可克隆的数据源对象。每种操作都能获取一个克隆的数据源对象,而且可以对自己的数据源对象进行不同的编码(如存储操作采用MOV视频格式编码,而发送操作则采用适合RTP要求的多媒体格式编码)而不影响其他操作,不用像其他语言一样采用各种技术方法复制数据流。
1.2 系统实现
1.2.1 数据源(DataSource)的捕获
JMF能捕获的本地数据源有两种:一种是来自于多媒体文件,另一种是来自于本地音视频硬件。多媒体文件的数据源可通过JMF提供的MediaLocator类定位本地或网络上多媒体文件的位置,然后采用Manager 类的createDataSource法捕获数据源。对于本地音视频硬件通过CaptureDeviceManager类的getDeviceList()方法获取所有设备的CaptureDeviceInfo对象,然后通过JMFUtils类的createCaptureDataSource()方法捕获数据源。
1.2.2 多媒体数据播放
在JMF中对应播放器的接口是Player,可通过Manager类的createPlayer(数据源对象)方法获取。Player对象将音频/视频数据源、文件数据源作为输入,然后将数据流输出到音箱或屏幕上,就像CD播放机读取CD唱片中的歌曲,然后将信号送到音箱上一样。获得了一个Player对象后,你可以通过调用getVisualComponent()方法得到Player对象的图像部件(Visual Component,在图像部件上可以播放多媒体的图像)。然后将图像部件加入到应用程序界面上。
1.2.3 多媒体数据的编码和发送
同样使用处理器来处理实时的视频、音频数据并且将数据轨道分别进行编码,使其适合网络传输。利用从处理器获取的数据源建立可用于网络传输的PushBufferDataSource数据源对象和PushBufferStream数据流对象数组,并建立RTP通讯管理类对象。为音/视频分别创建一个RTPManger。一般所有参与者选择一致的端口号,以便于管理。创建一个会话分为两步:初始化本地地址和添加目的地址。为了实现组播,采用组播IP 地址,本地与目的地址均设为组播IP 地址。利用从RTPManger对象获取的数据流发送多媒体数据。在初始化RTPManager 时,可通过BufferControl来设置接收buffer,以提高播放质量。1.2.4 多媒体数据接收
用上述的方法建立RTP通讯管理类对象数组,分别监听音、视频数据发送端口,添加SessionListener和ReceiveStreamListener监听对象,用于监听回话事件和接收数据流事件。当ReceiveStreamListener对象获取到NewReceiveStreamEvent事件时,可通过NewReceiveStreamEvent对象获取数据源,然后即可利用上面所提到的方法处理数据的播放和保存。
2 利用JGROUP实现聊天文字、白板信息的组播传输及在线用户信息对象的同步
JGroup是一种可靠的群组通讯工具,用Java实现。JGroup以IP多播为基础并且提供可靠性和群组功能。其中,可靠性包括: 消息不丢失; 大消息拆分和重组功能; 保证消息有序性; 消息原子性(某条消息要么全部成员都收到,或都收不到)。群组功能包括:群组成员知道群组内所有其他成员;当群组发生以下的事件,所有群组成员都能收到通知:1)新组员加入群;2)旧组员离开群;3)某现有组员意外脱离群 。
2.1 技术难点及解决方案
实现在线用户信息对象的同步,如果采用基于TCP的可序列化对象传输方法非常繁琐,要建立服务器和客户端链接并且进行对象传输。如果直接采用JGROUP的消息发送机制,在用户加入、离开、状态变更时都有发送信息到组内,过程也不简单。因此,JGROUP提供了两个类来实现数据同步:分布式哈希表(DistributedHashtable)、分布式哈希树(DistributedTree)。本系统通过建立分布式哈希表对象,保存一个在线用户列表,使得所用在线用户都能知道其他用户的状态。分布式哈希表允许在不同的主机上建立多个哈希表对象,所有的对象都具有同样的状态。当新建一个含指定组的分布式哈希表对象时,新对象会向已有的成员查询当前状态并更新。当对象调用put()或remove()时,不同主机上的哈希表对象亦会同时更新。
2.2 系统实现
2.2.1 聊天文字、白板信息的组播传输
要想加入一个组,并与组内其他的成员交互,必须建立一个信道(Channel)连接到组,同一个组内的所有成员使用相同的组名称。首先是创建一个信道,可以直接实例化一个Channel的实现,这里用的是JChannel。创建完之后,信道现在处于未连接状态,需要通过connect方法将之连接到组,使其处于连接状态,这时就可以发送/接收消息了。
2.2.2 用户管理
使用上述方法一样建立JChannel,利用JChannel建立分布式哈希表对象,已本地地址为关键字保存用户对象,并注册监听器。当分布式哈希表对象有用户对象加入、状态变更、离开时,监听器会接收到相应事件,各客户端可根据事件修改在线用户列表。
3 实现平台无关性
java体系已经支持java程序的平台无关性,只需要在编写程序时不直接或者间接调用不属于java api的本地方法,不接使用文件路径分隔符,而是采用File类的separator属性获取当前系统的文件分隔符。
[1] 孙一林,彭波.Java网络编程实例[M].北京:清华大学出版社.2005.
[2] 冯博,应群.网络视频流媒体技术与应用[M].北京:清华大学出版社.2001.
[3] 刘东华,王巍,唐刚.O'Reilly:Java网络编程(第2版)[M].北京:中国电力出版社.2001.
[4] 孙奎,殷兆麟.基于JMF的多人视频聊天软件的设计与实现[J].计算机工程与设计.2007:68-72.
[5] 江霖及,迟佳.基于JMF 的音,视频聊天实现 [DB,CD].中国科技论文在线.2007.
[6] 王丹.视频会议系统现状、关键技术及其应用[J].现代电视技术. 2002(1):20-24.
[7] 杨波.视频会议系统发展分析报告[J].江苏通信技术.2003.19(3):34-40.