于志楠 尹伟静
(沈阳师范大学 科信软件学院,辽宁 沈阳110034)
随着人们对音频和视频信息需求,视频会议系统广泛应用于现代企业中。视频会议系统[1]的可以适应现代社会的快捷、高效,使视频会议系统的使用正在向各行各业渗透。本文总结和借鉴其他视频会议软件系统的基础,结合JAVA跨平台[2-3]等优点,提出一种基于JAVA简单应用于局域网视频会议系统的设计与实现方案。
视频会议系统的示意图如图1所示。
图1 视频会议系统的示意图
从图看出,视频会议系统主要有三个部分组成,即通信网络、会议终端和多点控制单元。会议终端是将视频、音频、数据、信令等各种数字信号送上信道进行传输;多点控制单元是视频会议系统用于多点视听信息的传输与切换部分;通信网络是一系列的设备、机构和进程,附着在网络上的终端用户设备能够进行有意义的信息交换。涉及网络传输协议、网络编程接口等内容。
网络视频会议系统硬件主要:有网卡、声卡的电脑,摄像头,带麦克风的耳机其组成结构。
在软件结构上,由于整个系统是基于纯软件开发,设计上类似于TCP/IP模型,我们依然采用分层思想,降低复杂度,使程序更容易修改,软件开发速度更快,每层利用紧邻的下层服务,更容易记住各层功能,并有许多可选部分完成类似的任务。在体系结构上分为四个层次:IO层、处理层、传输层、网络层。
安装JMF后,利用它进行音视频的捕获。在JMF中,Capture Device Manager也是一个manager类,它提供给了一个列表,这个列表显示当前系统被使用的设备。同时Capture Device Manager通过查询的方法对设备进行定位并返回设备的配置信息对象Capture Devicelnfo,它也通过注册的方法向列表加入一个新的设备信息,以便为JMF使用。设备可通过Capture Device Manager的get Device0方法直接获得设备控制权,设备的控制权一旦得到,就以此设备作为一个Media Locator,通过Capture Devicelnfo的get Locator0方法得到。在JMF中,Capture Device Manager也是一个manager类,它提供给了一个列表,这个列表显示当前系统可以被使用的设备。同时Capture Device Manager通过查询的方法对设备进行定位并返回设备的配置信息对象Capture Devicelnfo,它也通过注册的方法向列表加入一个新的设备信息,以便为JMF使用。设备通过Capture Device Manager的get Device0方法直接获得设备控制权,设备控制权一旦得到,以此设备作为一个Media Locator,通过Capture Devicelnfo的get Locator0方法得到。
采集到的数据源是不适合直接传输的,经过处理,使其适合为RTP传输格式并产生新的数据源再进行传输,处理过程为:
用前面获得的数据源构造处理器对象,以便得到采集到的数据;
processor=javax.media.Manager.create Processor(datasource);
然后将数据源处理为适合RTP传输的格式;
然后调用处理器对象的get Track Control0方法,得到通道的Track Control对象;
媒体流中每一个磁道得到一个控制器;接下来调用Track Control对象的set Format()方法设置每个轨道的编码格式;
最后,调用处理器对象的get Data Output0方法产生数据源,以便数据传输时使用;RTP会话是由RTP Manager完成的,每个轨道都需要有一个管理器,管理器对象采用RTP Manager.new lnstance()方法来获得。建立会话时,需创建Session Address对象描述发送端与接收端的地址信息,再加入RTP管理器。会话建立后,由管理器创建流将数据通过网络发送。
接收媒体流也同样建立RTP会话,过程与发送流时建立会话的过程类似,不同的是每个RTP管理器需要加上监听器来监听相应地址与端口,包括会话请求、数据流到达等。系统实现Session Listener和Receive Stream Listener两个接口,前者用于监听RTP会话请求,后者用于监听是否有数据流到达。当创建一个新的数据流后,Session Manager会发出一个New Receive Stream Event。注册了Receive Stream Listener接收数据流监听器,会收到事件。为每一个新接收数据流创建Player。从接收数据流中获取Data Source,并作为参数传递给Manager来创建Player。发送端和接收端播放多媒体信息过程是相同的,由Session Manager到Data Source到Player,直接将播放的数据源交由播放器;创建并初始化RTP Session,创建一个Session Manager(会话管理器),并调用add Receive Stream Listener方法为RTP Manager对象添加RTP时间监听器,监听New Receive Stream Event事件,然后调用RTP Manager对象的initialize方法初始化RTP会话,设置本地和目的地地址和端口;Receive Stream Listener update方法,监视New Receive Stream Event事件,它会指示新数据流被检测到。当一个New Receive Stream Evem事件被检测到时,以New Receive Stream Event事件调用get Receive Stream方法,以取得Receive Stream数据流对象,然后通过调用输入数据流对象get Data Source获取RTP数据源对象;把数据源对象作为参数传递到Manager的create Player方法中来创建Player。直接将播放数据源交由播放器,播放器界面分为播放界面和控制界面两部分,分别用get Visual Component和get Control Panel Component方法来得到。
Player P=javax.media.Manager.create Player(ds);
P.add Controller Listener(this);P.realize();
Component VC,cc;VC=player.get Visual Component0;
CC=player.get Control Panel Component0;
通过SUN公司提供IP多播类实现多播技术分发媒体流,在具体实现时可通过.Multicast Socket类创建一个所获得的指定端口号的多播套接字,然后调用join Group方法加入到该多播组,接收端程序加入多播组后,便可以从该多播地址和端口号处接收媒体流。
系统采用JAVAGUI编程,运用SWING组件来编写,通过连接服务器取得连接后进行视频连接,连接后视频在屏幕显示其界面如图2。
本文总结和借鉴其他视频会议软件系统的基础,结合JAVA提出一种基于JAVA的应用于局域网的视频会议系统的设计方案。
[1]黄永峰,等.IP 网络多媒体通信技术[M].北京:人民邮电出版社,2003.
[2][美]Chad Darby,John Griffin,Pascal de Haan,等.Java 网络编程指南[M].邱仲潘,等,译.北京:电子工业出版社,2002.
[3]孙卫秦.Java 程序设计[M].电子工业出版社,2006.
[4]孙奎,殷兆麟.基于JMF的多人视频聊天软件的设计与实现[J].计算机工程与设计,2007,28(9):2196-2198.
[5]闰改珍,师卫.基于RTP的音频流多播系统的JMF实现[J].科技情报开发与经济,2007,17(5):240-242.