Openmeetings 应用及技术

 

一、Openmeetings应用前景

Openmeetings使得远程视频会议办公系统得到普遍应用,它能利用现有飞速发展的网络接入以及简单的pc资源,为用户提供视频、语音、丰富的白板操作界面,以及文档资源即时共享加载阅读,在线聊天、桌面共享以及控制功能,以上功能都能有会议主持人即时控制与会者的使用权限。由于本身是一套软件解决方案,造价和维护成本远低于全硬件操作,特别是作为在线沟通交流办公类非正式会议,是一款首选、优越、很受普通用户欢迎的系统,所以,应用前景是非常好的。

二、Openmeetings特点

1、是一个谷歌开源代码的系统,这就为基于之上的开发改造,带来了广阔的思维以及极大的可能性。

2、免费即使改造也是低成本的开发。

3、使用便捷,软件上辅助工具有:浏览器、网络,硬件上的辅助工具:电脑摄像头、麦克风、电脑PC机,界面操作简单明了。

4、二次开发容易,使用的开发语言主要有java、openlaszlo(开源拉兹洛)运行的lzx语言(一种基于XML和JavaScript的语言)、服务端是现成red5流媒体服务器发布,作为web应用,对外提供接口清晰。

5、一个房间能容纳最多100人,可以看到房间所有人的视频头(如果客户端PC都有摄像头), 可以控制单用户以及多用户下的交流应用模式。

6、用户可以录制视频、语音(通过第三方辅助软件实现格式转换处理)。在线聊天、临时保存用户办公资料。

图表 1

三、技术架构实现以及二次开发浅谈

Openmeetings是一个基于EPL(Eclipse Public License)协议发布的多语言支持,通过PTMP(Real Time Messaging Protocol,实时消息传输协议)和HTTP协议传送数据,支持发布的LDAP(轻量目录访问协议)。

3.1. 开发环境介绍

  1. JDK 1.5或以上版本。
  2. Red5 - 开源流媒体服务器,集成OpenLaszlo客户端编译运行环境。
  3. OpenMeetings - 开源视频会议系统,基于OpenLaszlo开发。
  4. MySQL或者其他数据库 - 必须是Hibernate支持的数据库。
  5. SVN -版本管理工具Subversion,从谷歌开源代码中检出OpenMeetings的源代码。
  6. ant,编译工具,将发布的文件以及lzx客户端源文件、red5服务器端运行文件、后台java源文件编译输出在dist文件夹里。
  7. 到解压后的OpenMeetings项目下Install目录中(新版本可能为conf)按照你自己的数据库来修改目录中的任意一个 xxx_hibernate.cfg.xml文件并另存为hibernate.cfg.xml,我的是MySQL所以就直接把 mysql_hibernate.cfg.xml文件改名然后把数据库地址用户名密码写上。
  8. 打开config.xml文件,看看端口\地址。
  9. 启动Red5服务器。
  10. 开浏览器输入地址http://localhost:5080/openmeetings/install,另外5080是默认端口。
  11. 使用客户端使用solo模式部署的话,在ant的build.xml文件中,有编译配置:下载的源代码中有openlaszlo客户端文件以及jar包,只需在此配置编译路径,还可以配置修改后台服务代码的编译路径、jar包、red5服务部署路径以及清除路径。

3.2. 运行环境介绍

1、流媒体服务器Red5

Red5的主要功能和Macromedia公司收费的FMS(Flash Media Server)类似,提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器,可开发Web音视频应用程序(比如,视频聊天室、视频会议系 统、播客系统、音视频留言等等)的最方便最快捷的解决方案。它由Java语言编写,使用RTMP作为流媒体传输协议,可与FMS完全兼容。

OpenMeetings的服务器端处理均是在Red5服务器中运行处理,Red5主要支持把音频(MP3)和视频(FLV)转换成播放流,实时录制客户端播放流(只支持FLV),共享对象,实时视频播放、Remoting远处调用等。

2、客户端OpenLaszlo

OpenLaszlo是一个与Flex并驾齐驱的主流的开源RIA(Rich Internet Applications)构建平台,使用Macromedia Flash 作为部署载体。OpenLaszlo 依赖 JavaScript 来表达逻辑,并提供了传统 Flash 开发方式无法比拟的一些优点,包括高级的 UI 约束系统、面向对象的设计方法学以及内置的对 Web 服务和各种风格的远程过程调用(Remote Procedure Call,RPC)的支持。

OpenLaszlo应用程序开发使用的是基于XML的LZX语言,它可以被编译成DHMTL,SWF等格式。

OpenMeetings中所有前台操作都是通过它编译生成flash,然后客户端操作产生事件再传递到后台服务端处理的,所以它在相当于我们常见网页界面,只不过它是flash形式展示的。

3、开源办公软件OpenOffice

OpenOffice.org 是一套开源的跨平台的办公室软件套件,能在 Windows、Linux、MacOS X (X11)、和 Solaris 等操作系统上执行。

它主要是用来处理OpenMeetings中演示文档时需要将各类格式的文档转换成PDF,它可将MS Word,Excel,PowerPoint,文本文件txt,MS Office 2007在内的多种格式,并且能够将其导出为PDF文件,由于它能广泛支持MS Office,而且免费,所以用它来进行转换处理是非常合适。

4、图像处理ImageMagick

ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式。利用ImageMagick,可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存。对图片的操作,即可以通过命令行 进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。同时ImageMagick提供了一个高质量的2D工具包, 部分支持SVG。现在,ImageMagic的主要精力集中在性能、减少bug以及提供稳定的API和ABI上。

OpenMeetings中通过它处理白板中的图像操作以及生成等工作。

5、Flash转换工具SWFTools

SWFTools是一种为Adobe Flash文件(SWF文件)工作的实用工具集。该工具集包括用于阅读或者合并SWF文件,,或者将(如图像,声音文件,视频或源代码)等文件转换成swf文件的程序。

它在OpenMeetings中是非常重要的,因为其中许多上传的文件或者系统运行中的文件都需要通过它来创建或者格式转换成swf文件,以便前台可以访问或者使用。

6、视频处理FFmpeg

FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库。

libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。OpenMeetings中通过它来实现录制视频并后期重组处理。

7、音频处理SoX

SoX是一个跨平台(Windows,Linux操作系统,MacOS X系统等)的命令行实用工具,可以转换各种格式音频文件的计算机在为其他格式。它也可以应用各种效果,将这些声音文件作为外放,SoX可以播放和录制大多数平台上的音频文件。

OpenMeetings中会议录制时将会用到音频处理,并将音频单独拆分出来外放。

3.3. 系统模型

OpenMeetings的后台是一系列的service组成的,这些service由Java语言编写,这些service的实现类大多都在包org.openmeetings.app.remote中,该包封装了大部分前后台交互的类。如文件服务、用户服务、会议服务、流服务等等。

这些service作为接口供前台调用,它们分别处理不同的功能请求。例如:

  • UserService:用户注册、登录、注销、修改用户信息等。
  • StreamService:视频音频录制,格式转换,处理视频流,音频流。
  • ConferenceService:会议设置,会议管理,可根据需要设置不同功能的会议室。
  • RoomService :为核心模块,提供房间预定、删除、房间成员管理、房间权限功能管理。
  • OrganizationService:组织管理,可添加修改组织,并和用户进行关联。
  • LanguageService:语言编辑管理,可编辑修改按钮名
  • 称,注释,菜单名等。
  • ErrorService:各种消息提示处理,如注册成功弹出框提示,错误提示。
  • FileService:文件上传,文件管理,文件格式转换。

 

图表 2系统模型图

3.4. 服务器端框架

 

图表 3系统服务框架图

OpenMeetings服务器端是Java开发的,采用了Spring和Hibernate框架。

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维 来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。

3.5. 技术体系层次

前台的浏览器页面请求是由OpenLaszlo编写lzx文件,编译完成后是一个Flash的形式(swf文件)。前后台的交互大部分通过 RPC(Remote Procedure Call)远程调用实现,即OpenLaszlo程序远程调用后台的Java类,也有部分回调,所有连接red5服务端调用方法在hibRtmpConnection.lzx,客户端所有lzx文件都有各自包目录的library.lzx文件包含,此标签文件为最高级,编译后可以控制到flash界面的最大变量范围:canvas容器最为最高级。

前后台的交互也有少部分是通过http协议完成的,比如图片的上传和现实,文档的上传等等。这一部分与传统的B/S架构是类似,后台是Java语言编写的servlet,这些servlet位于包org.openmeetings.servlet。

servlet和service接口处理逻辑请求时通过hibernate访问数据库并获得数据,并向前台返回请求结果。

用户操作时,上传的文件或者图片会通过外部扩展攻击SWFTools来转换成swf然后供前台展示。视频音频录制后会通过调用外部命令FFmpeg和 SoX来实现视频音频的格式转换和整合,它们将生成一个无声的视频,并对应的生成一个音频,以供只需视频或者只需音频的不同需求。

数据库服器可采用多种应用于多种数据库,如sqlserver、mysql、ocracle,postgresql,只需在数据库配置文件中修改对应的数据库驱动,并装上对应的包即可。

3.6. 数据库设计

1)语言和提示信息设计

fieldlanguagesvalues为存放所对应的语言的实际内容,它根据语言表fieldlanguage的language_id来区分语言 的种类,fieldvalues表是fieldlanguagesvalues表的一个每个所需显示的语言对应,例如在 fieldlanguagesvalues表中同一个fieldvalues_id表示他们属于同一个表示值,但是不同的 fieldlanguagesvalues_id表示不同的语言(language_id)下的值是不同的,这样程序中查询所对应语言的时候只需根据 fieldvalues_id即可查到它所在不同语言下对 ,一般使用传统汉语的xml配置文件。

2)用户、组织、房间数据库设计

用户表(users)通过关联表organisation_users和组织表(organisation)关联,该关联表表示每个用户表所对应的组织,单个用户可以对应多个组织。

组织表与房间表(rooms)通过关联表rooms_organisation表相关联。它负责记录每个房间和组织的对应关系,这样可以按房间类别和用 户所在的组织是否属于该房间来控制用户是否有权限进入该房间参与会议或者访谈。房间类别表roomtypes(上图未列出)来表示各个房间的类别,通过 roomtypes_id来进行关联。

会议邀请表(invitations)为当用户需要预定某些用户参与预约的会议时用到,关键的记录了开会的房间和有哪个用户发起,并记录了参与的用户等信息。

用户权限根据用户表中的level_id来控制,1为管理员,2为主持人,3为普通用户。将来扩充的话可根据用户表所关联的user_level表来增加或者修改用户权限类别。

3) 代码实例

一个房间主页面的例子:

<class name="flexibleEventRoom" extends="baseConferenceRoom">
    <attribute name="roomobj" value="null" />  
    <attribute name="meetingTimer" value="null" />
    <handler name="oninit">
    if ($debug) Debug.write("roomobj: @@@@@-----111 ",this.roomobj);	
   	canvas.setAttribute('_whiteboardPanel',this._splitStrict.
		_splitStrict_Black._whiteboard); 
        if (this.roomobj.isDemoRoom) {
            if (this.roomobj.demoTime != null) {
              this.meetingTimer = new lz.meetingTimer(canvas,{refObj:
              this,roomobj:this.roomobj});
            }
        } 
        //this._chatPanelStrict.toggleopen();setContextMenu() 
    </handler>
	<method name="setlogicalRoomLeave">
	    <![CDATA[   
	        if (canvas._chatcontent!=null){
	        	canvas._chatcontent = null;
	        this.logicalRoomLeave.doCall();
}
	    	    ]]>
	</method>
  </class>

以上的<class name="flexibleEventRoom" extends="baseConferenceRoom">表示定义个类,并且含有继承关系。

  • <attribute name="roomobj" value="null" />代表属性。
  • <handler name="oninit">代表事件方法。
  • if ($debug) Debug.write("roomobj: @@@@@-----111 ",this.roomobj);代表调试输出。
  • canvas.setAttribute('_whiteboardPanel',this._splitStrict.
    _splitStrict_Black._whiteboard);代表将白板对象放在最大变量区域内以供调用。
  • <method name="setlogicalRoomLeave"> 代表类方法。
  • this.logicalRoomLeave.doCall();表示rpc调用。

由于lzx可以远程调用service中的接口,所以我们在WEB-INF\red5-services文件夹下找到 *.service.xml,其中看到*.service对应于 org.openmeetings.app.remote.MainService,所以我们可以在MainService找到函数logicalRoomLeave, 这个就是前台远程调用的函数了。

后面再通过hibernate访问数据库,比较用户数据的正确性以判断是否允许离开房间

项目地址:http://code.google.com/p/openmeetings/

 

转载:http://express.ruanko.com/ruanko-express_39/tech-overnight3.html

你可能感兴趣的:(Openmeetings)