【转】OpenMeetings研究

【转】OpenMeetings研究
2011年07月06日
  摘要:该文介绍了基于开源框架OpenMeetings的网络视频会议系统的环境介绍以及总体设计。该系统支持音频、视频,能共享每个与会者的桌面。它还包含一个白板,通过白板可以导入各种格式的图片并进行演示。系统架构主要是服务器端采用Java开发,采用了Spring和Hibernate框架,运行于Red5流媒体服务器;客户端用OpenLaszlo开发,在Flash player环境下运行。
  随着网络的普及和视频交流的广泛需求,软件视频会议的应用越来越广泛,但传统的客户端方式的软件系统也给客户的视频会议应用带来了诸多障碍:下载和安装客户端软件时的各种繁琐流程、浏览器对各种插件的校验与排斥、各类防火墙防病毒软件的严格检查。据统计,有超过50%以上的用户因为诸如此类的原因而放弃了软件视频会议客户端的安装。视频会议的Web化是几年来软件视频会议在技术上、应用上不断发展之后的一个必然选择,与传统的C/S模式的软件视频会议相比,无论是在灵巧性、易用性方面,还是在易嵌入、易整合、易扩展等方面,Web视频会议都表现出其强大、高柔韧度的特征。
  而开源框架的OpenMeetings正是基于Web化并且客户端采用纯FLASH呈现的视频会议系统。OpenMeetings最大特点是视频会议客户端不需要下载安装,OpenMeetings系统将客户端做成swf形式,通过网页浏览的方式自动加载,免去用户下载安装的步骤,所有支持flash的浏览器都可以使用OpenMeetings进行视频会议。OpenMeetings另一大特点在于其强大的跨平台能力,从FireFox、Chrome、傲游到IE,从Linux、Mac、Unix到Windows全系列,而随着Flash对各类新型操作系统和智能终端的不断兼容,OpenMeetings视频会议所支持的设备、浏览器、操作系统也在不断扩大,相比而言,基于客户端方式的视频会议系统想做到这一点是异常困难的。
  1 OpenMeetings系统简介
  OpenMeetings是基于Flash的多语言可定制的开源EPL(Eclipse Public License)视频会议软件,通过RTMP和HTTP协议传送视频数据。
  OpenMeetings的主要采用的开发语言是Java和LZX(Laszlo XML-based language,一种基于XML和JavaScript的语言),它的服务器端运行于开源的流媒体Flash服务器 Red5,客户端是OpenLaszlo的应用,并且运用第三方辅助软件实现格式转换处理以及视频音频录制等功能。
  OpenMeetings是可以从选择操作系统(Linux)到数据库(MySQL)到流媒体服务器(Red5)到辅助软件(OpenOffice、FFMpeg等)到开发环境(OpenLaszlo、Eclipse)等完全开源的系统。
  2 运行环境介绍
  2.1 流媒体服务器Red5
  Red5的主要功能和Macromedia公司收费的FMS(Flash Media Server)类似,提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器,可开发Web音视频应用程序(比如,视频聊天室、视频会议系统、播客系统、音视频留言等等)的最方便最快捷的解决方案。它由Java语言编写,使用RTMP作为流媒体传输协议,可与FMS完全兼容。
  OpenMeetings的服务器端处理均是在Red5服务器中运行处理,Red5主要支持把音频(MP3)和视频(FLV)转换成播放流,实时录制客户端播放流(只支持FLV),共享对象,实时视频播放、Remoting远处调用等。
  2.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形式展示的。
  2.3 开源办公软件OpenOffice
  OpenOffice.org 是一套开源的跨平台的办公室软件套件,能在 Windows、Linux、MacOS X (X11)、和 Solaris 等操作系统上执行。
  它主要是用来处理OpenMeetings中演示文档时需要将各类格式的文档转换成PDF,它可将MS Word,Excel,PowerPoint,文本文件txt,MS Office 2007在内的多种格式,并且能够将其导出为PDF文件,由于它能广泛支持MS Office,而且免费,所以用它来进行转换处理是非常合适。
  2.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中通过它处理白板中的图像操作以及生成等工作。
  2.5Flash转换工具SWFTools
  SWFTools是一种为Adobe Flash文件(SWF文件)工作的实用工具集。该工具集包括用于阅读或者合并SWF文件,,或者将(如图像,声音文件,视频或源代码)等文件转换成swf文件的程序。
  它在OpenMeetings中是非常重要的,因为其中许多上传的文件或者系统运行中的文件都需要通过它来创建或者格式转换成swf文件,以便前台可以访问或者使用。
  2.6 视频处理FFmpeg
  FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。
  OpenMeetings中通过它来实现录制视频并后期重组处理。
  2.7 音频处理SoX
  SoX是一个跨平台(Windows,Linux操作系统,MacOS X系统等)的命令行实用工具,可以转换各种格式音频文件的计算机在为其他格式。它也可以应用各种效果,将这些声音文件作为外放,SoX可以播放和录制大多数平台上的音频文件。
  OpenMeetings中会议录制时将会用到音频处理,并将音频单独拆分出来外放。
  3 OpenMeetings的系统架构
  3.1 服务器端框架
  OpenMeetings服务器端是Java开发的,采用了Spring和Hibernate框架。
  Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。
  Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。
  3.2 系统模型
  图1的模型中,OpenMeetings的后台是一系列的service组成的,这些service由Java语言编写,这些service的实现类大都在包org.openmeetings.app.remote中,该包封装了大部分前后台交互的类。如文件服务、用户服务、会议服务、流服务等等。
  这些service作为接口供前台调用,它们分别处理不同的功能请求。例如:
  UserService:用户注册、登录、注销、修改用户信息等。
  StreamService:视频音频录制,格式转换,处理视频流,音频流。
  ConferenceService:会议设置,会议管理,可根据需要设置不同功能的会议室。
  OrganizationService:组织管理,可添加修改组织,并和用户进行关联。
  LanguageService:语言编辑管理,可编辑修改按钮名称,注释,菜单名等。
  ErrorService:各种消息提示处理,如注册成功弹出框提示,错误提示。
  FileService:文件上传,文件管理,文件格式转换。
  3.2 技术体系层次及数据库设计
  3.2.1 技术体系层次
  前台的浏览器页面请求是由OpenLaszlo编写lzx文件,编译完成后是一个Flash的形式(swf文件)。前后台的交互大部分通过RPC(Remote Procedure Call)远程调用实现,即OpenLaszlo程序远程调用后台的Java类,也有部分回调。
  前后台的交互也有少部分是通过http协议完成的,比如图片的上传和现实,文档的上传等等。这一部分与传统的B/S架构是类似,后台是Java语言编写的servlet,这些servlet位于包org.openmeetings.servlet。
  servlet和service接口处理逻辑请求时通过hibernate访问数据库并获得数据,并向前台返回请求结果。
  用户操作时,上传的文件或者图片会通过外部扩展工具SWFTools来转换成swf然后供前台展示。视频音频录制后会通过调用外部命令FFmpeg和SoX来实现视频音频的格式转换和整合,它们将生成一个无声的视频,并对应的生成一个音频,以供只需视频或者只需音频的不同需求。
  数据库服器可采用多种应用于多种数据库,如sqlserver、mysql、ocracle,postgresql,只需在数据库配置文件中修改对应的数据库驱动,并装上对应的包即可。
  3.2.2 数据库设计
  1)语言和提示信息设计
  fieldlanguagesvalues为存放所对应的语言的实际内容,它根据语言表fieldlanguage的language_id来区分语言的种类,fieldvalues表是fieldlanguagesvalues表的一个每个所需显示的语言对应,例如在fieldlanguagesvalues表中同一个fieldvalues_id表示他们属于同一个表示值,但是不同的fieldlanguagesvalues_id表示不同的语言(language_id)下的值是不同的,这样程序中查询所对应语言的时候只需根据fieldvalues_id即可查到它所在不同语言下对
  2)用户、组织、房间数据库设计
  用户表(users)通过关联表organisation_users和组织表(organisation)关联,该关联表表示每个用户表所对应的组织,单个用户可以对应多个组织。
  组织表与房间表(rooms)通过关联表rooms_organisation表相关联。它负责记录每个房间和组织的对应关系,这样可以按房间类别和用户所在的组织是否属于该房间来控制用户是否有权限进入该房间参与会议或者访谈。房间类别表roomtypes(上图未列出)来表示各个房间的类别,通过roomtypes_id来进行关联。
  会议邀请表(invitations)为当用户需要预定某些用户参与预约的会议时用到,关键的记录了开会的房间和有哪个用户发起,并记录了参与的用户等信息。
  用户权限根据用户表中的level_id来控制,1为管理员,2为主持人,3为普通用户。将来扩充的话可根据用户表所关联的user_level表(上图未列出)来增加或者修改用户权限类别。
  3.2 代码实例
  一个登录的调用实例:
  代码1:(checkLoginData.lzx)
  
  
  this.parent.errormess.setAttribute('text','');
  if (this.parent.userpass.getText().length == 0) {
  new lz.rpcErrorDialog(canvas.main_content._content.inner,{errorid:-51});
  return;
  }
  this.parent.loginUser.doCall();
  //Recheck the Applet Status
  getAppletStatus();
  
  this.parent.pointer.setXPath('languagesSet:/');
  this.parent.pointer.processData();
  
  
  代码1意思是当登录按钮有点击事件时执行的两句代码,handler是当某个事件触发时即执行。
  this.parent.loginUser.doCall();调用loginUser类。
  代码2:(checkLoginData.lzx)
  
  
   return canvas.sessionId;
   return parent.parent.username.getText();
   return parent.parent.userpass.getText();
   return parent.parent._savelogindata.getValue();
   return Number(parent.parent.languages.getValue());
   return Number(parent.parent.domain.getValue());
  
  代码2中netRemoteCallHib name="loginUser" funcname="xmlcrm.loginUser" 指明了loginUser远程调用指向的函数名为xmlcrm.loginUser。而后面带上的内则是该函数调用所带去的参数。
  代码3:(xmlcrm.service.xml)
  class="org.openmeetings.app.remote.MainService">
  由于lzx可以远程调用service中的接口,所以我们在WEB-INF\red5-services文件夹下找到xmlcrm.service.xml,其中看到xmlcrm.service对应于org.openmeetings.app.remote.MainService,所以我们可以在MainService找到函数loginUser,这个就是前台远程调用的函数了。
  后面再通过hibernate访问数据库,比较用户数据的正确性以判断是否允许登录。
  参考文献:
  [1] OpenLaszlo.www.openlaszlo.org/documentation.
  [2] Openmeetings wiki.code.google.com/p/openmeetings/wiki.
  [3] 田立军,李军锋,何斌.基于Hibernate框架实现数据持久化应用研究[J].舰船电子工程,2009(6).
  [4] 金松河,钱慎一,程立辉.基于Java的数据库连接池技术的设计与实现[J].河南科技,2005(3)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值