Red5+OpenOffice+OpenMeetings架设视频会议网络

转自:http://hi.baidu.com/it0820/blog/item/27e52a62f2e218680d33fad8.html

参考:http://conkeyn.iteye.com/category/74559?show_full=true

采用了flash流媒体服务器Red5+OpenMeetings。其实是OpenMeetings的运行依赖于Red5,也就是说OpenMeetings是一个基于Flash的视频会议解决方案。OpenMeetings的一大亮点是能够在会议过程中做 PPT的演示,这一功能得益于OpenOffice的文档转换能力和提供Java远程访问的能力。
    整个架设过程非常简单。
    1、Red5提供了个常见操作系统的安装包,完全傻瓜式的安装,下一步下一步解决。
    2、从OpenMeetings的网站(http://code.google.com/p/openmeetings/downloads/list)下载最新的Web应用,解压到Red5的webapps目录下(Red5内置Tomcat服务器);
    3、在OpenMeetings的web应用的install目录下修改hibernate.cfg.xml文件,将数据库配置到已创建的数据库(只需要创建数据库,不需要手工建表);
    4、重启Red5服务,加载OpenMettings应用;
    5、打开浏览器输入http://localhost:5080/xmlcrm/Install(注意大小写,如果你修改了Red5的端口,将5080修改成您指定的端口);在现实的页面上点击“Step 1”开始OpenMeetings配置。需要注意的是邮件服务器必须正确的填写,否则无法进行用户注册,也就没有用户可以登录使用了。部署时还需要注意两个工具的配置,一个是SWF工具(完成其它类型文档到swf的转换)和图形工具,这两个工具在配置页面上提供了下载地址(google so cool!),再输入工具地址的时候要以"/"结束。
    6、上一步输入完成后点击“send”开始配置,这个配置的过程大概需要5--10分钟,不要以为应用死翘翘了:-)。
    7、配置完成以后就可以登录使用了,enjoy it!

后记:由于OpenMeetings默认的一个会议室只能4个人参加,不知道老外怎么想的。没办法,只能下载OpeenMeetings的源码作修改。 OpenMeetins的客户端源码是一个“OpenLaszlo ”的应用,被逼无奈研究了一下OpenLaszlo ,感觉还算是个不错的RIA解决方案。放开人员的限制只需要修改videoconference\xmlcrm\content\conference\ roomlistItem.lzx文件的maxUsers变量的值就可以了;但是你会发现人员限制放开了,但是会议室里面的摄像头个数还是4个,怎么办?这个只需要修改一下videoconference\xmlcrm\content\conference\conference.lzx文件,参考原来的摄像头布局,添加摄像头个数就可以了,不过摄像头个数确实不适合太多,因为摄像头一多数据流量会相当大,服务器压力太大,而且一般的视频会议也就是几个领导+几个小兵,小兵就不用摄像头了嘛,乖乖的看和听就可以了。

在http://code.google.com/p/openmeetings/wiki/BuildSources?tm=4 里面有openmeetings源码的下载方法。你可以用svn客户端工具连接http://openmeetings.googlecode.com /svn/branches/dev/laszlo/client/下载浏览客户端代码;
svn客户端连接http://openmeetings.googlecode.com/svn/branches/dev/xmlcrm/获取后台服务端java代码以及web应用。

-----------------------------------------------------------------------------------------------------------------------------------------

OpenMeetings是一个多语言可定制的视频会议和协作系统。它支持音频、视频,支持共享左面,文件协作处理,它还包含一个白板,通过白板可以导入各种格式的图片。它基于OpenLaszlo的新流媒体格式和开源的Flash服务器Red5。重要的是,它的国际化支持很好。 有中文可以选择。这对我们来说,是很方便的。不用去搞什么"汉化"了。最重要的,它基于LGPL(http://www.thebigfly.com/gnu/lgpl/lgpl-v3.php)开源协议,所以,搭建这样一个平台是完全自由免费的。


       官方网址:http://code.google.com/p/openmeetings/,等不及的化,可以先进入http://demo.openmeetings.de/openmeetings/ 这里看看功能演示,需要自己注册账户登陆。不多速度有点慢,耐心等待就是。


       申明一下我的平台,windows xp,2003都安装通过。所以,所有的安装软件都将下载windows版的。


      说一下安装依赖的软件,共有:OpenOffice,ImageMagick,GhostScript,SWFTools,Red5.如果你下载的是包含了Red5的话,就不用单独下载Red5了。Red5自带了Tomcat6,直接启动Red5后,tomcat6将会自动启动。如果只是运行起来系统的化,是不只需要Openmeetings,Red5,就可以了。不安装OpenOffice,ImageMagick等将让你无法得到某些功能,比如ppt处理,pdf转换等。 


     下面是我下载的所有软件:(没有指出jdk,mysql的安装。二者请自行安装,不做说明)

Java代码  openmeetings_0_7_rc2.zip   (http://openmeetings.googlecode.com/files/openmeetings_0_7_rc2.zip),包含red5,不用下载red5了。       OpenOffice:OOo_3.0.0_Win32Intel_install_zh-cn.exe   (http://ftp.spnet.net/openoffice/localized/zh-cn/3.0.0/OOo_3.0.0_Win32Intel_install_zh-cn.exe)     ImageMagick:ImageMagick-6.4.9-6-Q16-windows-dll.exe      (http://www.imagemagick.org/download/binaries/ImageMagick-6.4.9-6-Q16-windows-dll.exe)     SWFTools:swftools-2009-02-16-1757.exe   (http://www.swftools.org/swftools-2009-02-16-1757.exe)     GhostScript:gs863w32.exe   (http://downloads.sourceforge.net/ghostscript/gs863w32.exe?use_mirror=nchc)  



    下面所有的目录均以我安装的目录为例,不再另做说明。

     
    下面是安装步骤。

Java代码  1   ImageMagick安装,直接next就行。命令行下执行 convert,出现版本信息则ok。     2   SWFTools安装,直接next,必须手动设置path,如:C:\SWFTools 。命令行执行pdf2swf,可以执行则ok。     3   GhostScript安装,一路next。无需设置.     4   OpenOffice安装,直接next。然后启动OpenOffice.org,并让其监听8100端口。具体步骤:命令行下执行:      soffice.exe -headless -nologo -norestore -accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager。      通过 netstat -anp tcp,如果显示含有8100端口相关信息,则ok。     5   解压OpenMeetings,找到解压目录F:\openmeetings_0_7_rc2\webapps\openmeetings\conf,       修改hibernate.cfg.xml中的mysql连接名和密码。     6   登陆mysql,创建数据库openmeetings.(安装过程会自动建表).     7   进入F:\openmeetings_0_7_rc2,运行red5.bat.(red5将自动启动附带的tomcat6)     8   在浏览器运行http://localhost:5080/openmeetings/install (5080是默认tomcat端口,可以手动配置)。       将出现安装界面。有个安装说明,因为我们已经按要求来了,所以直接点击  continue  with STEP 1    9 这里将对系统进行一些配置,比如管理员名,密码,邮箱,邮件服务器(没有可以不填),ImageMagick路径等等。       除了管理员名,密码等,都可以不填,其他信息登录后也可以再修改。     10 稍等一下,1分钟左右(主要是建数据库表的过程),出现安装成功界面,直接点击Enter the Application,开始登录吧。       登陆后你就是管理员,可以管理用户,视频,语音等等等等,自己发掘去。------------------------------------------------------------------------------------------------------------

要修改代码,其实说到前面两步就差不多了,因为接下来的事情,就是读懂和理解代码,然后按照自己的需求来修改,各人需求不同,自然修改的方案也有很多不同。

不过介于OpenMeetings客户端的开发语言为OpenLaszlo,相信很多人都从来没有接触过,这里我就大致的说下。

学习简单的OpenLaszlo语法

(比较懒的兄弟可以跳过这节直接转到下面的“懒人***室”,呵呵)
推荐大家去看一看OpenLaszlo Explorer中的Laszlo in 10 Minutes,启动Laszlo服务器,然后访问http://127.0.0.1:8080/lps-4.0.9.1/laszlo-explorer/index.jsp就可以看见(Windows下的安装后直接双击桌面图标就能够自动触发浏览器访问此地址)。这个是给大家对于OpenLaszlo的语法进行一个简单的介绍。另外,点击Documentation下面的LZX Reference还能够看到更详细的每个标签和指令的介绍。这些应该都会在修改代码过程中有所帮助。我这里介绍几个修改代码时可能会用的多的:
1. 类的继承、定义与使用
2. 事件与触发
3. 基本元素view, text
4. 数据绑定(dataset)
看这些相信最多花费你1-2个小时的时间,然后你就可以开始修改了。

在调式模式下启动OpenMeetings

首先说下我修改时的调试方法,我是在后台启动部署了OpenMeetings服务器端的Red5和部署了客户端的OpenLaszlo两个服务器,然后访问http://127.0.0.1:8080/lps-4.0.9.1/videoconference/main.lzx?lzr=swf8,即可编译并启动OpenMeetings客户端

然而,在OpenMeetings客户端的根路径下其实有两个主文件,一个main.lzx和maindebug.lzx,这两个都可以用来整合编译并启动OpenMeetings客户端,但maindebug.lzx是带调试界面的,更便于修改用,我们可以把访问地址改为http://127.0.0.1:8080/lps-4.0.9.1/videoconference/maindebug.lzx?lzr=swf8,这样每次运行都会有一个调试框,里面会显示很多客户端本身就带有的调试信息。当然你也可以自己在代码中写入调试信息,Debug.write(xxxx);运行时即会将xxxx的内容显示在调试框中。

懒人***室

有很多兄弟肯定还是比较懒的,接下来我将几个简单又比较通用的修改帖上来,按照这个修改完成以后基本上就是一个简单的***室了,下面的步骤不分先后,你可以根据自己的需求决定哪些需要修改哪些不需要:

1. 去掉邮件注册
    前面我们介绍了OpenMeetings安装的时候必须设置一个邮件服务器,如果没有邮件服务器则前台是无法注册的。现在我们就把这个烦人的邮件注册去掉。
    服务器端文件中,找到org.xmlcrm.app.data.user.Usermanagement类,找到下面一行
    Long user_id = this.registerUserInit(3, 1, 0, 1, login, Userpass,lastname, firstname, email, age, street, additionalname,fax, zip, states_id, town, language_id, true, new LinkedHashMap());
    将倒数第二个true改为false,部署以后再到前台注册,现在已经不会提示Invalid EMail了

2. 修改界面左上角网站名称和连接
    修改config.xml文件中:
    <currentappname>xxx</currentappname>为网站名称(可以为中文) 
    <currentappnameurl>、<currentappnamebugurl>标签为自己的网站URL

3. 修改登录框,设置默认语言为中文
    每次登陆以后默认都是英文的,要选择一下语言而且登陆以后才会变成中文,我们可以让它一开始就是中文。
    然后修改xmlcrm/hibernate/rtmphib.lzx文件<attribute name="userlang" value="1" type="number" />这一句,value由1改为9(9是chinese simplified在语言那个下拉菜单的顺序)。
    修改xmlcrm/auth/checkLoginData.lzx文件combox name="language"标签下的handler name="oninit"事件内容,两行this.selectItemAt(0);全都改为this.selectItemAt(8);,这样系统会在初始状态下默认选择简体中文(8=9-1)。
    这样重新编译,你的界面就初始为简体中文了。
    (貌似也可以用管理员帐户在后台直接改)

4. 去掉登录框上不需要的部分
    登陆框下面的语言选择,颜色选择和带宽我都去掉了,方法如下:
    auth/checkLoginData.lzx文件,其中每个labeltext标签和其下缩进的一个表单标签(combobox/customedittext)一起代表一行的输入框和其前面的名称,将不需要的都在标签最后加入 visible="false"属性(我去掉了最后三项)。
    同时注意剩余的labeltext和表单标签中的y值为其所在的纵向坐标,需要修改之让其匹配界面应在的位置。可以参考原删除的标签的y位置。最后的simplelabelbutton就不要改了,因为是按照相对高度定位的。
    最后,修改整个窗体的高度,顶部的class标签最后的height属性,改为应有的值,大概是每删除一个表单标签-30,例如删除了3项输入框,就是原有高度260 - (3 x 30) = 170。

5. 修改登入后界面,直接到私人房间界面
    对于一个聊天室,登陆以后其实直接到房间列表就够了,所以你需要。。。
    /xmlcrm/navi/mainnavi.lzx文件,找到mainnavi类,最后一个handler name="oninit",修改代码行if (i==0) t1.onclick.sendEvent();中间if条件为i==2。这样进入后就会自动进入“会议”菜单
    然后找到mainmenumeetingsitem类,下面的handler name="onclick",最后一行else this._menuRef.subviews[0].onclick.sendEvent();改为else this._menuRef.subviews[1].onclick.sendEvent();这样进入后就会自动进入“私人会议”列表界面

6. 去掉房间列表页面中右侧的聊天窗口
    进入房间列表页面以后,可以看见右侧有一个聊天窗口,如果你希望屏蔽他们的话。。。
    根据需要修改/xmlcrm/content/meetings/publicmeetings.lzx(公共房间列表)/xmlcrm/content/meetings/privatemeetings.lzx(私人房间列表),删除<roomlistdetails x="510" y="50" name="_roomlistdetails" />一行即可

7. 屏蔽顶部菜单
     顶部菜单可以进行一些操作,但对于一个聊天室,这些操作其实有些多余,下面是删除办法。
    /xmlcrm/navi/mainnavi.lzx文件,找到mainnavi类,先在其中找到第一个view标签(就在紧接一堆attribute下面,不含有name属性的那个),然后为其加上name属性name="navibar"。然后还是mainnavi类中,找到最后一个handler name="oninit",在Debug.write("this: ",this);后添加代码:
            if (value.length == 4) {
            this.navibar.setAttribute("visibility", "hidden");
            this.itemlist.setAttribute("visibility", "hidden");
            this.subitemlist.setAttribute("visibility", "hidden");
            }
    这样,当管理员登陆的时候看到的还是原来的界面。普通用户登陆则看不到顶部菜单。如果只希望屏蔽一级菜单,而希望留下“公共会议”和“私人会议”菜单,则不要第三行this.subitemlist.setAttribute("visibility", "hidden");即可。

8. 屏蔽右上角菜单,仅剩下Logout登出
    登陆进去以后,屏幕右上角总是显示三项:用户、退出、报告错误。如果不希望有用户和报告错误两项的话,就按照下面的做。
    /xmlcrm/navi/mainnavi.lzx文件,找到helpandbugs类,将其中name="btn1"和name="btn2"的两个view标签及其包含内容全部删去即可

9. 修改未翻译的文字
    即使选择了简体中文,系统依然会有很多地方的显示是英文的,我们需要手工的将部分未翻译过来的单词自己翻译一下,有三种办法:
    (1) 在服务器端代码(不是客户端代码)中找到webapp\openmeetings\languages\,里面存的是所有的国际化文件,english.xml为英语,chinese simplified.xml为中文,用文本编辑器打开以后可以按照你自己的希望对不满意的翻译进行修改。修改以后需要用管理员帐号登陆,然后在【管理】-【Language-Editor】中Import修改后的xml文件到chinese simplified。
    (2) 用管理员帐号登陆,然后在【管理】-【Language-Editor】可以直接对数据库中的语言进行翻译,比较方便。
    (3) 直接访问数据库表fieldlanguagesvalues,用select * from fieldlanguagesvalues where language_id = 9即可查看所有的简体中文国际化记录,直接修改value的值也能达到同样的结果,用数据库的好处是查找比较方便,呵呵
    另外还有部分语言是硬写在代码里的,这些只需要对整个项目搜索那段英文再修改为中文即可,例如:/conference/popups/changedevice.lzx 中Do not ask again改为中文“下次不再提示”

10. 删除进入房间后顶部菜单中不需要的功能
    进入房间后,顶部一排有很多功能菜单,申请主持、文件上传、投票等等,这些功能对于一个纯粹的聊天室来说,有些多余,而且这些功能全都可以在其他地方实现,所以你可以根据需要将顶上的部分功能菜单给删除。
    /xmlcrm/content/conference/conferencemenubar.lzx文件中找到conferencemenubar类,其下每一个labelmenu标签代表一个菜单项,顺序为从左至右,将不需要的菜单项删去或注释掉即可。再在上面一点找到一堆command标签,根据快捷键将不要的也删除或屏蔽,以避免有人使用快捷键调用功能。
    而房间上中的按钮和显示则在文件/conference/moderation/moderationpanel.lzx的moderationpanel类中,同样将不需要的屏蔽即可

11. 国际化房间里主要面板的标题
    进入房间后,发现不管怎么修改语言数据,那三块板子顶上的标题就是不变,这是因为这三个标题没有绑定国际化的原因。
    /xmlcrm/content/conference/conference.lzx中,找到videoboard类,删去title属性,加上labelid="313";
    找到whiteboardpanel类,删去title属性,加上labelid="315";
    找到filespanel类,删去title属性,加上labelid="314"

12. 删除房间里左下角框中不需要的功能
     房间里左下角框里面是有聊天、文件和成员三个选项的,文件用来控制白板,还有些用,而投票在***室里面恐怕用不上,所以去掉。
    /conference/tabbar/conferencecontainertab.lzx中,找到conferencecontainertab类,3个openmeetingsTabButton标签每个代表一个tab按钮,屏蔽不需要的

13. 修改房间人数限制
    有些兄弟认为4人房间的聊天室太无聊。。。不过好像也是。。。又不是打麻将。。所以。
    /xmlcrm/conference/roomlistItem.lzx文件中<attribute name="maxUsers" value="4" type="number" />一行,修改value的值即是修改最大人数。最大人数修改以后展示的时候界面可能有些乱,这个就你自己去调整了,因为我做的时候没有这个需求,所以没有测试过实际效果,呵呵~~

客户端文件结构简单介绍

这里只介绍几个对界面修改比较有用的文件:

/config.xml        一些全局参数定义
/main.lzx        主文件,用来整合其他文件
/maindebug.lzx       带debug的主文件
/xmlcrm/hibernate/rtmphib.lzx   定义并实例化hibrtmpconnection类,负责主要流程调度及部分默认配置,比较重要
/xmlcrm/hibernate/netremotecallhib.lzx 定义netremotecallhib类,继承于netremotecall类,负责调用后台服务器端Java方法,使用很多
/xmlcrm/content/meetings/publicmeetings.lzx 定义公共会议列表相关类
/xmlcrm/content/meetings/privatemeetings.lzx 定义私人会议列表相关类
/xmlcrm/conference/roomlistItem.lzx 定义roomlistItem类,代表会议房间列表页面中的一个房间展示
/xmlcrm/auth/checkLoginData.lzx   定义checkLoginData类,负责登陆框的显示
/xmlcrm/navi/mainnavi.lzx    定义登录后的主界面展示相关类
/xmlcrm/content/conference/conferencemenubar.lzx 定义房间左上角菜单
/conference/moderation/moderationpanel.lzx 定义房间上中的显示和按钮
/xmlcrm/content/conference/conference.lzx 定义房间主要的三个面板类
/conference/tabbar/conferencecontainertab.lzx 定义房间左下角聊天窗口中的内容
/conference/video/basevideoobject.lzx 视频对象的基类,定义了视频图像的外框显示
/conference/video/videoobjectbroadcast.lzx 视频播放类,定义了会议房间中的本人的视频显示
/conference/video/videoobjectplayBroadcast.lzx 视频播放类,定义了会议房间中的其他人的视频显示
/conference/video/videocontainer.lzx 视频容器类,定义了房间内左上角框里的所有视频对象的展示
/conference/whiteboard/ 白板相关类
/conference/tabcontent/chat 房间内的聊天窗口相关类
/conference/tabcontent/files 房间内的文件窗口相关类

部署

要部署的时候建议把整个客户端生成一个swf文件然后复制到服务器端(即使用SOLO方式编译,如果不知道如何编译,参考我的另一篇文章 OpenLaszlo下的Proxied和SOLO两种编译方法 ),这样服务器端部署的时候就不需要再开启OpenLaszlo服务器了。另外注意,将修改过的config.xml文件和swf文件一起拷贝到服务器去,否则有些修改又没了,呵呵。(如果swf文件和red5是部署在同一台机器上的,建议你把config.xml文件中rtmphostlocal留空,这样可以省去很多麻烦)

拷贝过去后先修改index.jsp文件中SWFObject的第一个参数,使之指向你的swf文件。然后访问http://localhost:5080/openmeetings/即可看到效果,部署完成。

然后,然后。。。如果你在自己的机器上部署了,希望外网的朋友来和你一起测试或使用的话,注意要配置路由上用虚拟主机端口映射,开放1935、8088、5080三个端口指向自己(当然也可以直接将自己设为DMZ。。如果感觉自己够安全的话。。),如果是非SOLO方式还要为Laszlo服务器开放8080;另外,机器上如果有Kapersky之类的话需要关闭,否则会拦截外网的端口访问。

写在最后

好了,东西写的差不多了,虽然我自己修改这个所做的远不止写的这些,但我想我也只能写到这里了。
我写这些东西的目的只是希望大家能够得到一点启发,每个人需求都不一样,我相信根据我的修改肯定达不到你的要求,但相信你通过边做边学习这些之后,完成后面的事情应该不是什么难事了。
我平时少上IM,我的邮箱是,有兴趣的朋友可以mail我交流,呵呵~~
星期天准备去海淀学校散散心~~
最后祝大家周末愉快~~^_^

你可能感兴趣的:(Red5+OpenOffice+OpenMeetings架设视频会议网络)