由於需要用到多人視訊功能,但是又要能夠分享桌面,目前似乎沒有自由軟體能做到如此。所以就試著找看看,找到 apache foundation 的 openmeetings,這才知道有這麼一套 "自由軟體線上會議" 程式存在。看了些文件後,真是覺得功能符合我的需求,於是 花了幾天時間來研究安裝建置及使用,做成筆記。
小弟的環境是以 debian testing (wheezy) 安裝,若是其他 distribution,請自行修改。
命令是以一般使用者即可安裝,只有在安裝 package 時 apt-get 要 root 權限,在此是用 sudo。
在安裝 openmeetings 前,有些東西是必要的,要先準備好:
debian wheezy 的 swftools 裡並沒有 pdf2swf 這個指令,所以無法上傳 pdf 檔來做簡報,若一定要有,請自行從原始碼編譯。
openmeetings 滙入 .doc, .docx, .ppt, .pptx,都是用 libreoffice 或 openoffice 去做轉換動作,所以在 openmeetings 這台伺服器上一定要裝 office。而呼叫 office 來做轉換的動作,則由 jodconverter 來完成。
因為 openmeetings 在檔案上傳後,都是轉成 pdf,所以要安裝 ghostscript。
$ sudo apt-get install ghostscript
若之前舊文件有用 big5 字型,也要安裝 big5 字型。
$ sudo apt-get install ttf-arphic-bsmi00lp ttf-arphic-bkai00mp
若文件用到 windows 的細明體的話,預設 linux 並沒有,所以轉換後會變亂碼,直接將字型從 windows 拷貝到 linux 下即可。 $ sudo mkdir /usr/share/fonts/truetype/windows/
$ sudo cp mingliu.ttc /usr/share/fonts/truetype/windows/
到 https://incubator.apache.org/openmeetings/ 抓 openmeetings 回來。
解開到指定目錄:
$ mkdir /media/share/apps/openmeetings /由於 debian wheezy 裡的 jodconverter 是 2.2.2 版,必須將 office 啟動成一個 service 在背景跑,listen 一個 tcp port,然後 jodconverter 2.x 再透過 tcp port 去要求 office 做轉換動作。
但是 jodconverter 3.0 則 office 不用在背景跑,jodconverter 3.x 會去呼叫 office 來轉檔,轉完後會關閉 office,所以用 3.x 版比較省資源 。
jodconverter 2.x: $ sudo apt-get install jodconverter
$ soffice --headless --nofirststartwizard --accept="socket,host=localhost,port=8100;urp"
會 listen 在 localhost:8100, 而 jodconverter 2.x 在轉換時會自行去跟 office 溝通。
或使用 jodconverter 3.x:
下載 jodconverter 3.0:
https://code.google.com/p/jodconverter/downloads/list
解開至 openmeetings 目錄裡
$ unzip jodconverter-core-3.0-beta-4-dist.zip -d /media/share/apps/openmeetings/ jodconverter 是 3.0-beta-4, 若下次 beta 5 或正式版釋出,則路徑會不同,要再修改,所以預先做個連結,以後不用再到 openmeetings 裡修改路徑,將新版做個連結即可。
$ cd /media/share/apps/openmeetings/
$ ln -sf jodconverter-core-3.0-beta-4 jodconverter-core
預設 openmeetings 資料庫是用 apache derby database,若要改成 mysql 則需在此先準備好。
由於 openmeetings 要使用 mysql 時,是以 mysql root 權限去使用,這樣風險太大。沒必要的權限不要開。所以先手動建立 openmeetings 資料庫,然後允許 your_openmeetings_user 這個使用者只能使用這個資料庫,其他的不能動。
以 mysql root 連到 mysql server 下指令:
mysql > create database openmeetings;
mysql > grant all on openmeetings.* to your_openmeetings_user@localhost identified by 'your_openmeetings_password';
等個約 30 秒,若沒問題,伺服務啟動完成,會 listen tcp port 5080, 1935, 8088 和其他幾個 port。
openmeetings 本身就有內建 http server,不用額外配合 apache web server。
Port 5080: HTTP (瀏覽器登入及檔案上傳下載)
Port 1935: RTMP (Flash Stream and Remoting/RPC)
Port 8088: RTMP over HTTP-Tunneling (rtmpT)
因此在 openmeetings server 上的防火牆要打開 tcp 5080, 1935, 8088, 其他的是 openmeetings 內部自己使用就不需要。
打開瀏覽器,開啟 openmeetings web-installer, 開始安裝:
https://localhost:5080/openmeetings/install
開啟頁面有一堆說明,預設 openmeetings 資料庫是用 apache derby dat abase, 在真實 production run 環境下,可改用 mysql、postgres、 IBM DB2、oracle 等等。不管那些說明,直接按 "Continue with STEP 1" 進入安裝畫面。
開始要先填上使用者及密碼,電子郵件及時區,這個使用者即為 "超級使用者" 身份。電子郵件則是忘記密碼時重置密碼用及傳送會議連結。
在 Configuration 部份,預設是系統會寄一封信給新註冊的使用者,使用者收信後,點選 email 上的連結啟動帳號,若是不想這麼麻煩,可修改
Send Email to new registered Users (sendEmailAtRegister) | No |
New Users need to verify their EMail (sendEmailWithVerficationCode) | No |
預設電子郵件伺服器是指向 localhost, 所以本機 mail server 要 listen tcp port 25;另外也可使用外部 smtp server, 如 google 的 smtp.gmail.com 的方式。
SMTP-Server (smtp_server) | smtp.gmail.com |
SMTP-Server Port (default Smtp-Server Port is 25) (smtp_port) | 587 |
SMTP-Username (email_userpass) |
gmail 使用者名稱(自行設定) |
SMTP-Userpass (email_userpass) | gmail 密碼(自行設定) |
Enable TLS in Mail Server Auth | Yes |
在 Converters 部份,若是有在 PATH 裡的執行檔,則不用在此設定,可直接找到。因此只要調整 jodconverter 3.x 版的 JOD Path:
JOD Path: ./jodconverter-core/lib
其他的都保持原狀,拉到最底下按 INSTALL 按鈕開始安裝動作,我的電腦持續卡住約 10 分鐘才安裝完成(使用 derby database),若用 mysql 大約 2 分鐘,要有點耐心,完成會跳到另一個視窗,千萬不要一直 refresh 或重開瀏覽器,否則會安裝失敗。
安裝完成後,直接按 Enter the Application 到登入畫面。登入畫面是用 flash 的,所以瀏覽器要裝 adobe flash plugin, 小弟試用過 gnash, 無法使用。 也可直接開啟網址使用,網址為 https://localhost:5080/openmeetings
以剛才建立的超級使用者登入 (Sign in) 或新註冊一個,按 (Not a member?) ,註冊時可選擇語言,有正體中文可選,可是翻譯並不完整而且很多是大陸用語,為求一致性,所以選英文介面來介紹。
剛登入時是位於 "Dashboard" ,如圖1。
▲圖1 Dashboard
上方的功能表項目:左上角是個人資料及大頭照。
右上角 "Profile" 可修改個人詳細資料。
下方 "My rooms" 活頁標籤為個人會議室及你必須參加的會議列表,按每個會議室的整條長方型條可看目前會議室內的人員,要加 入會議室則點 [Enter]。
"My rooms" 的右邊是 "Chat",可看目前線上人員並與他溝通。也可邀請某位目前在線上的人進某個會議室。
右邊是簡易使用說明及捷徑。按下 [Start] 可進入會議室列表(和上方 "Rooms" 一樣)。接著請按下 [Start],即可看到會議室列表 。
在公開會議室選 "conference room with micro option set" 這間會議室並點 [Enter] 。
首先會彈出一個 "Choose device" 視窗,選擇 webcam、麥克風及解析度,按 [Start recording test] 確認 webcam 有看到影像,沒問題按 [Start conference] 進入會議室,如圖2。
▲圖2 會議室第一個進入會議室的人,會自動成為會議主持人,擁有所有權限。(使用白板、桌面分享及錄影、控制遠端桌面、是否有權限獨 佔麥克風)。
左上角為功能表:最右上角可看到目前會議室名稱、要求取得會議主持人權限及分享自己的桌面及錄影。
點選分享及桌面錄影圖示,會出現視窗詢問要以什麼應用程式來開啟 .jnlp 檔,若在 client 機器上有裝 icedtea-netx,則此時可選 IcedTea Java Web Start 來使用。可將桌面分享給會議中的人,並可同時錄影起來,如圖3。
按左上角 [Start sharing],會立即將自己的桌面分享給會議室內的所有人員。
右上 [Close] 關閉此視窗。
左邊中間可微調要分享桌面的大小,預設是全螢幕,可以拖拉只分享某一部份。
右邊中間可調整錄影的解析度。
下方 [Start Recording] 開始錄影, [Stop recording] 停止錄影,可以不分享桌面,單純只錄影。
在按下停止錄影後,伺服器還在背景做轉換動作,所以要過個幾分鐘,影片才會出現在 Dashboard 裡的 Recordings,不要認為為什麼沒看到影片。
▲圖3 桌面分享及錄影視窗左邊:
"Users" 活頁標籤為參加會議室人員列表及權限,於此要求權限或開放權限給某人。
"Files" 活頁標籤可上傳檔案放到白板展示。在上傳完成後,檔案位於 "My files (home drive)",只能自己能存取,用滑鼠將檔案拖到 "Room files (public drive)" 則參加會議的人都可以存取,不同會議室有不同的 public drive。將要展示的文件或圖片,以滑鼠左鍵拖到右 方白板上,若是多頁檔案,則下方 "Document properties" 綠色箭頭可切換上、下頁;或是於左方檔案列表檔案上按滑鼠右鍵,選 "Open document",則可看到每一頁內容,直接在頁面上按滑鼠左鍵即可展示到白板。
左下角視窗為動作視窗,若有要求權限時,在會議主持人的左下角出現要求訊息,會議主持人可於此同意或拒絕權限。
右邊一大塊即為白板,預設只有一個白板,可按上方綠色內有白色加號圓圈來新增另一個白板。
白板下方 "Properties" 可調整畫筆顏色及方塊或橢圓填滿的顏色及投影片上、下頁功能。
最下方 "Chat" 可打字發言。
會議流程大致如下:
經過一陣子的研究,大致弄懂 OpenMeetings 的操作,整個功能非常完整,若再加上外掛來運作,真是殺手級軟體,不愧是 "自由軟體線上會議方案"。
Comments
而且搭配 jdk 7 會有問題,無法安裝成功
java.lang.NullPointerExce ption
org.apache.velocity.tools.view.VelocityView.performMerge(Ve locityView.java:942)
org.apache.velocity.tools.view.VelocityView.merge(VelocityV iew.java:902)
org.apache.velocity.tools.view.VelocityViewSer vlet.mergeTemplate(V elocityViewSer vlet.java:318)
org.apache.velocity.tools.view.VelocityViewSer vlet.doRequest(Veloc ityViewSer vlet.java:220)
org.apache.velocity.tools.view.VelocityViewSer vlet.doGet(VelocityV iewSer vlet.java:182)
javax.servlet.http.HttpServlet.service(HttpSer vlet.java:621)
javax.servlet.http.HttpServlet.service(HttpSer vlet.java:728)
org.red5.logging.LoggerContextFi lter.doFilter(Logger ContextFi lter.java:77)