close

openmeeting 改造成flash聊天室


(一)
好了,開始吧。首先我們需要用到以下東東:
1. JDK 1.5或以上版本 -  這個就不說了,以下所有東西都是基於它的。
2. Red5 -  開源Flash服務器,用來替代FCS/FMS,畢竟License還是有些貴的,呵呵。這裡有信息和下載http://www.osflash.org/red5
3. OpenMeetings -  開源視頻會議系統,基於OpenLaszlo開發。這裡有信息和下載 http://code.google.com/p/openmeetings/
4. OpenLaszlo -  開源的富客戶端應用開發平台(有點長,呵呵,用它的話來說是the premier open-source platform for rich internet applications)。這裡有信息和下載:http://www.openlaszlo.org/
5. MySQL或者其他數據庫 -  必須是Hibernate支持的數據庫
6. SVN - 著名的版本管理工具Subversion,用來下載OpenMeetings的源代碼的。Windows下推薦TortoiseSVN,這裡下載:http://tortoisesvn.tigris.org/。Liunx就直接命令行吧,呵呵。喜歡用Eclipse的兄弟也可以用Subclipse插件http://subclipse.tigris.org/
7. 沒有第7個東西要下載了
好了上面是需要用到的項目,我們先來部署一次看看效果。下面是部署過程,我們暫時不需要用到Laszlo和SVN
1. 先裝JDK(注意要是1.5.0以上),這個到處都有教程,就不說了。注意裝完以後要設置JAVA_HOME到JDK路徑。
2. 根據你的系統下載red5的安裝包,然後傻瓜式安裝
3. 從OpenMeetings下載一個已經打包好的應用(http://code.google.com/p/openmeetings/downloads/list),解壓到Red5的webapps裡面,解壓後目錄應該是xmlcrm(最新版本可能為openmeetings)
4. 到解壓後的OpenMeetings項目下Install目錄中(新版本可能為conf)按照你自己的數據庫來修改目錄中的任意一個 xxx_hibernate.cfg.xml文件並另存為hibernate.cfg.xml,我的是MySQL所以就直接把 mysql_hibernate.cfg.xml文件改名然後把數據庫地址用戶名密碼寫上去就OK了。
5. 打開config.xml文件,看看端口啊,地址啊,有沒有什麼要修改的。
6. 啟動Red5服務器。如果是在Windows下Red5設成了服務的,在Windows的服務中重啟。
7. 開瀏覽器輸入地址http://localhost:5080/xmlcrm/Install(注 意大小寫;Install根據版本也有可能為conf;另外5080是默認端口,如果修改了就按照你自己的弄)先進入安裝界面,東西隨便填。注意郵件服務 器,如果你像我一樣沒有郵件服務器的話,就不填,只是暫時只能由管理員來添加帳號而無法直接註冊,呵呵。然後其中要填入兩個工具地址,就在頁面上已經提供 了下載了。
8. 配置完了點擊Send按鈕,然後去喝杯咖啡或者茶什麼的,因為要5-10分鐘。。。=。=#
9. 全部搞定訪問 http://localhost:5080/xmlcrm就可以登陸了,你登陸的時候會是管理員,可以在頂上選擇Manage來進行管理。同時提供白板可以畫畫,還可以共享桌面,呵呵。
先玩玩看看效果吧,晚點我再介紹修改。
(二)
看了效果後如果有興趣,我們就可以開始著手修改OpenMeetings了。
要修改當然先是要拿到源代碼了。我們先大致瞭解一下OpenMeetings的源代碼結構。OpenMeetings分為兩部分:一部分是客戶端, 由OpenLaszlo和一些Flash文件組成,負責生成最終的客戶端swf文件;另一部分是服務器端,由Java代碼編寫而成。我們必須分別下載並編 譯這兩個部分,注意這兩個部分版本必須一樣。下面分別說明這兩個部分的部署過程。
服務器端
1. 用SVN從這個地址Check out出代碼http://openmeetings.googlecode.com/svn/branches/dev/xmlcrm/java/
2. 到install目錄中(新版本可能為conf)按照你自己的數據庫來修改目錄中的任意一個 xxx_hibernate.cfg.xml文件並另存為hibernate.cfg.xml,我的是MySQL所以就直接把 mysql_hibernate.cfg.xml文件改名然後把數據庫地址用戶名密碼寫上去就OK了。
3. 代碼可以用eclipse直接import,不過編譯OpenMeetings推薦使用ant,項目已經提供了一個build.xml文件,直接在 eclipse裡面Run as Ant就可以編譯整個項目,編譯結果將在項目下的dist目錄下。(這裡有個小問題,本人下載的r980版本中的build.xml文件居然編譯的時候沒 有包含編譯java文件,導致部署一直失敗,解決方法只需要在最後一行的depends=」clean, prepare, compile, hibernate」最後加一個jar就可以了,改為 depends=」clean, prepare, compile, hibernate, jar」)
4. 將編譯完成的dist中的openmeetings文件夾複製到red5的webapps下,重啟red5服務器,服務器端部署完成。
(如果嫌部署太麻煩,可以將build.xml文件中<property name=」dist.dir」 value=」dist」/>這一行value的值改為你的red5的webapps如:<property name=」dist.dir」 value=」C:\Program Files\Red5\webapps」 />,並將<delete dir=」${dist.dir}」/>這一行刪掉或註釋掉。這樣每次運行build.xml文件的時候就可以直接部署到red5下了)
客戶端
1. 下載並安裝OpenLaszlo,http://www.openlaszlo.org
2. 用SVN從這個地址Check out 出代碼http://openmeetings.googlecode.com/svn/branches/dev/laszlo/client/
3. 代碼也可以用eclipse直接import,但編譯需要使用OpenLaszlo,這個以後再說。
4. 複製剛才代碼下xmlcrm下的videoconference文件夾到OpenLaszlo下,{OpenLaszlo目錄}/Server/lps- 4.0.9/(4.0.9為我的版本號,根據服務器版本不同而不同)Windows默認安裝是這個地址:C:/Program Files/Openlaszlo Server 4.0.9/Server/lps-4.0.9/videoconference/(其中4.0.9同上解)
5. 修改videoconference/config.xml文件,端口啊、地址啊都改成你自己的。rtmphostlocal標籤中的內容是你的red5服務器安裝位置。
數據庫配置與測試
本來在上一篇裡面寫過一點點數據庫配置,有兄弟在問,這裡就再說下
1. 安裝一種數據庫,數據庫的類型隨便,只需要保證hibernate支持類型就行了,這裡可以看哪些支持http://www.hibernate.org/80.html,不需要建立任何數據庫或庫表,等下程序會幫你建立
2. 完成上面兩步,注意服務器端的第2步,那裡必須保證正確
3. 啟動red5服務器
4. 服務器端安裝
訪問 http://localhost:5080/openmeetings/Install, 程序會自動進入Step 1安裝,上面框填入你的信息,中間框郵件服務器那一項如果沒有可以留空,下面框填入SWFTool和MagicImage兩個必須的工具的安裝後的路徑, 如果沒有安裝這兩個軟件的話可以點擊輸入框下面的連接去下載,安裝完成後再填入。然後選擇Senden,之後進展會很慢不要關閉頁面也不要以為死機了,可 以做些別的事情例如和身邊的美女同事聊聊天什麼的,大約5-10分鐘後安裝完成,此時數據庫中已經多了一個庫了。直接訪問http://localhost:5080/openmeetings應該可以看見輸出結果,但由於其中的swf是事先編譯好的,不是我們編譯出來的,所以我們還需要學習下面的客戶端安裝
5. 客戶端安裝
(1) Proxied方法
現在保證red5服務器中剛才部署的服務器端在運行,然後啟動OpenLaszlo服務器,並在瀏覽器中輸入:http://localhost:8080/lps-4.0.9/videoconference/maindebug.lzx?lzr=swf8http://localhost:8080/lps-4.0.9/videoconference/main.lzx?lzr=swf8 即可看到結果(4.0.9根據具體版本號變更,如果OpenLaszlo不在本機,請修改localhost為OpenLaszlo服務器地址
(2) SOLO方法
還可以使用SOLO模式編譯(如何SOLO模式編譯可以參看我另外一篇文章 OpenLaszlo下的Proxied和SOLO兩種編譯方法)在客戶端目錄中生成swf文件,然後將客戶端目錄中的main.lzx.lzr=swf8.swf 複製到服務器端部署好的目錄中覆蓋原來的同名swf文件(即{red5路徑}/webapps/openmeetings),然後僅啟動red5服務器,訪問http://localhost:5080/openmeetings同樣可以看見結果
關於Laszlo開發工具
Laszlo的開發工具網上大多數都是介紹使用Eclipse插件IDE for Laszlo作為開發工具,但此工具在2006年12月的時候就因為太不活躍而被eclipse留檔停止了。現在比較推薦的是Spket,http://www.spket.com/,它是免費軟件,如果要用於商業目的則需要付費。當然你也可以選擇直接使用文本編輯器開發。
好了,差不多了,現在代碼也有了,部署也通過了,想改什麼都行了,嘿嘿。俺先去擺弄兩下iTouch,下次再來說修改和編譯^_^。
(三)
要修改代碼,其實說到前面兩步就差不多了,因為接下來的事情,就是讀懂和理解代碼,然後按照自己的需求來修改,各人需求不同,自然修改的方案也有很多不同。
不過介於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,我的郵箱是fallen_lord@126.com,有興趣的朋友可以mail我交流,呵呵~~
(四)
本來是沒什麼東西好寫的了,不過這幾天的持續改造中又出現了各種讓人比較頭疼的問題,準備將這篇文章作為持續更新,遇到比較疑難的問題我會一直發上來。
1. 改進攝像頭
這不知道是否算的上個bug,google了一下,中文網頁沒見人提過,英文的話。。俺英文比較差看不太懂,呵呵。
現象是這樣的,進入房間後顯示的視頻,會根據不同的攝像頭被切掉一部分,有的攝像頭只切掉邊緣一小塊,而有的攝像頭甚至只顯示了原面積的1/9,平時可以看見一個身體的,這裡卻只能看見一隻眼睛。
由於我的需求是需要讓不同的視頻框有不同的大小,俺花了一個下午的功夫才搞定攝像頭視野被裁切的問題,下面是修改的部分,大家可以自己修改試試。
/conference/remote/devvideoview.lzx文件中,在類devvideoview中增加兩條attribute:
<attribute name=」_myWidth」 value=」160〞 />
<attribute name=」_myHeight」 value=」120〞 />
修改<method name=」init」>中:
vid._width = this.width;
vid._height = this.height;
改為:
vid._width = this.myWidth;
vid._height = this.myHeight;
修改<method name=」setWidth」 args=」w」>中:
if (!this._clipinitdone) {
this.width = w;
return;
}
改為:
if (!this._clipinitdone) {
this.width = 576;
this.myWidth = w;
return;
}
修改<method name=」setHeight」 args=」h」>中:
if (!this._clipinitdone) {
this.height = h;
return;
}
改為:
if (!this._clipinitdone) {
this.height = 432;
this.myHeight = h;
return;
}
2. 修復房間用戶數量不增加問題
我的版本r988有這個問題,感覺這也算一個bug。
問題的現象是,用戶加入房間後房間的用戶數量始終為0,這樣主要是房間人數上限就沒有起到作用了。後來看了下程序,發現是客戶端調用rooms_id不正 確導致的,只需要修改/xmlcrm/content/conference/roomlistItem.lzx文件,將所有的 this.obj.rooms_id全都改為this.obj.room.rooms_id即可解決問題。
3. 服務器端代碼嵌入中文,ant提示中文警告的問題
這個其實不算是openmeetings的問題,不過開始還是讓我頭痛了一把。由於ant編譯的默認編碼是根據系統的編碼來確定的,因此如果java文件 存成utf-8而系統編碼又是GBK(win2000)或者GB18030(winxp)裡面又含有中文,那麼ant編譯的時候就會提示警告。如果只是注 釋是中文,則警告也不會有什麼影響,但是如果有字符串裡面寫著中文,就出問題了。
解決方法是查找build.xml文件中所有的javac標籤,為其加上屬性encoding=」UTF-8〞即可解決問題。
4. RED5服務器0.7以上版本無法配置針對項目的log的問題
這個問題是由於red5服務器最新版由log4j改為使用logback導致的。如果使用red5 0.63或以下版本,原來的openmeetings中的配置是沒有問題的,如果使用0.7或以上版本,則openmeetings需要修改才能使之按照 項目配置正常輸出log。方法如下:
(1) 在openmeetings下的lib/red5中刪除以下jar包,這裡注意,如果項目中有其他的log4j-xxx.jar也要刪除
slf4j-api-xxx.jar
log4j-xxx.jar
slf4j-log4j12-xxx.jar
jcl104-over-slf4j-xxx.jar
slf4j-simple.jar
slf4j-simple-xxx.jar
commons-logging-xxx.jar
(2) 在red5安裝路徑下的lib中找到如下jar包:
slf4j-api-xxx.jar
logback-core-xxx.jar
logback-classic-xxx.jar
log4j-over-slf4j-xxx.jar
jcl104-over-slf4j-xxx.jar
複製到openmeetings下的lib/red5中並將其加入eclipse的classpath
(3)  在openmeetings項目中webapps/openmeetings/WEB-INF/web.xml文件中刪除以下段落
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
以及以下段落
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
(4)  刪除openmeetings項目中所有的log4j.properties和log4j.xml,應該是有兩個 webapps/openmeetings/WEB-INF/log4j.properties和src/app/log4j.properties
(5) 最後在src/app/添加logback.xml文件,內容如下:
<?xml version=」1.0〞 encoding=」UTF-8〞?>
<configuration>
<appender name=」STDOUT」 class=」ch.qos.logback.core.ConsoleAppender」>
<layout class=」ch.qos.logback.classic.PatternLayout」>
<Pattern>
%d{MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
<root>
<level value=」DEBUG」 />
<appender-ref ref=」STDOUT」 />
</root>
<logger name=」org.hibernate」>
<level value=」WARN」 />
</logger>
<logger name=」org.apache」>
<level value=」WARN」 />
</logger>
<logger name=」org.springframework」>
<level value=」WARN」 />
</logger>
</configuration>
(5) 這樣不需要修改代碼,重新啟動項目就可以看到logback的輸出了,平時的使用和log4j一摸一樣,同樣是導入 org.apache.log4j.Logger類進行操作,因為log4j-over-slf4j.jar包中的類覆蓋了原log4j的類,呵呵
(6) 使用logback還有一個最大的好處,就是logback提供了eclipse的插件,可以直接將red5的內容輸出到eclipse的控制台中進行輸 出,非常方便。插件下載地址在: http://logback.qos.ch/consolePlugin.html
提醒一下。。。記得一定要配置插件的filter哦。。。不然會被log弄爆的,哈哈
好了,to be continue…

arrow
arrow
    全站熱搜

    安德森 發表在 痞客邦 留言(0) 人氣()