Openmeetings videokonferencia Internet böngészés közben gyakran találkozunk a web 2.0, felhasználói élmény, webes jelenlét, tartalommegosztás fogalmakkal. Ez a cikk azok számára szól, akiket érdekel, hogy működik a Flash technológia, milyen lehetőségek nyílnak kizárólag open-source szoftverek alkalmazásával ilyen programok fejlesztésére. Bemutatok továbbá egy Openmeetings nevű alkalmazást mely kizárólag nyílt forrású szoftverek segítségével valósít meg böngészőből elérhető Flash alapú videokonferencia szolgáltatást néhány kiegészítő funkcióval, melyek alkalmassá teszik a szoftvert többek között a távoktatásban való felhasználásra. A Flash eredetileg a Macromedia, később az Adobe tulajdonát képező sokáig teljesen zárt, mára részletekben megnyíló forráskódú termékcsalád. Sok fejlesztő számára kényelmes platformot biztosít, mivel a kliens-szerver architektúra minden alkotóeleme számára biztosít programozási felületet.
Protokollok A felhasználók számítógépei a mindenki által ismert Flash Player, és a szerver oldalon Flash Media Server szoftverek között a Real Time Messaging Protocol (RTMP) különböző változatai szállítják az információt. A Real Time Messaging Protocol egy streaming protokoll, ami számos csatornán képes információt szállítani. Ezen csatornákon video streamek, audio streamek mellett RPC requestek – vagyis távoli függvényhívások – és out-of-band vezérlő üzenetek mehetnek. A legfőbb problémát az jelentette, hogy az 1935-ös TCP porton kommunikál, így a tűzfalak komoly akadályt jelentenek a használata során. Ezen probléma elkerülése érdekében készült el a Real Time Messaging Protocol Tunneled (RTMPT). Itt a korábban használt módszer helyett az adatfolyamot feldarabolják, és HTTP csomagokba ágyazva a 80-as TCP porton keresztül továbbítják. Hátránya, hogy az adatmennyiség a HTTP fejlécek miatt megnő, ellenben a portszűrést végző tűzfalak nem jelentenek továbbá problémát. A felek közti kommunikáció biztonságosabbá tétele érdekében két megoldás született: az RTMP Secure (RTMPS) és az RTMP Encrypted (RTMPE). Az RTMPS gyakorlatilag megegyezik az RTMPT protokollal, annyi változtatással, hogy HTTP helyett HTTPS protokollt használ, vagyis SSL-titkosítást. Az Adobe által gyártott RTMPE tervezésénél szempont volt, hogy az RTMPS-nél egyszerűbb legyen. Ez sikerült is, viszont az ára olyannyira magas volt, hogy gyakorlatilag nem jelent nagyobb biztonságot, mint az RTMPT. Az Adobe később befoltozta ezt a biztonsági rést, de elemzők szerint a biztonságot továbbra
-1-
is az ismeretlenség szolgáltatja. Érdemes megemlíteni a szintén az Adobe-hoz fűződő Real Time Media Flow Protocol-t is,
ami
lehetővé teszi a kliensek direkt kapcsolatát. Előnye, hogy mivel UDP protokollt használ, így eleve alacsonyabb sávszélesség igénnyel rendelkezik, illetve hogy nem terheli a szerver hálózati erőforrásait. További szolgáltatásai közé tartozik az ip mobility, vagyis nem szakad meg a kapcsolat, ha az egyik kliens IP címe megváltozik, illetve a Rapid Connection Restore, ami a megszakadó kapcsolatokat állítja gyorsan helyre.
Kliens alkalmazások Az open-source flash fejlődése számára mérföldkövet jelentett az RTMP protokoll specifikációjának publikálása 2009 nyarán. Szabad utat kaptak az addig reverse engineeringre szoruló open-source fejlesztések. A Flash kliensprogramok Small Web Format (SWF) típusú fájlokat futtatnak. Ez egy konténer formátum, tartalmazhat multimédiás, vektorgrafikus állományokat, animációkat, illetve alkalmazásokat is. Jelenleg az Adobe tulajdona, specifikációja részlegesen nyitott, ez lehetővé teszi a használatát, viszont a teljes implementáláshoz erősen hiányos. A flash programok ActionScript nyelven programozhatók. Ebben nyújtanak segítséget a különböző fejlesztői környezetek, mint az Adobe Flash, vagy a Flex Builder. Az elkészített flash állományok az említett az SWF formátumba exportálva nyerik el böngészőből használható formájukat.
Szerverek Szerver oldalon több különböző alternatíva mutatkozik az Adobe Flash Media Server mellett, például a Wowza Media Server vagy a Red5. Ezek képességeit az alábbi összehasonlító táblázat foglalja össze. Flash Media Server RTMP
protokollok
Red5
RTMP
RTMPT Támogatott
Wowza Pro Unlimited
RTMPS RTMPE RTMPTE
RTMPT
RTMP
RTMPS
RTMPT
RTMPE
RTMPS
RTMPTE
RTMFP
-2-
Fejlesztői kiadás
10 kapcsolat (ingyenes)
10 kapcsolat (ingyenes)
Árak
$4500
$995
Microsoft® Windows Támogatott platformok
Server® 2003, 2008 Linux® Red Hat® 4 or 5.2
Windows Mac OS X Linux Solaris Unix
Videófolyam
Hangfolyam
FLV
FLV
H.264
H.264
FLV
FLV
Ingyenes Ingyenes (Open Source)
Windows Debian/Ubuntu Mac OSX Gentoo
FLV F4V MP4 MP3
MP3
MP3
F4A
HE-AAC
HE-AAC
M4A
H.264/AAC to FLV Rögzítés
H.264/AAC to FLV container
container H.264/AAC to MP4
FLV
(Quicktime) Szerveroldali nyelv
AS2
Java
Java
A fentiek közül a Red5 flash szervert fogom közelebbről is bemutatni.
Red5 Ahogy már korábban írtam a Red5 egy Java -ban írt Flash RTMP szerver. Támogatja az audio és videó streamelést, kliens streamek rögzítését, megosztott objektumokat, élő közvetítéseket, stb. Lehetőség van áttérni Flash Media Serverről is, ekkor a szerver oldali alkalmazás átírása szükséges.
Rendszerkövetelmények Rendszerkövetelmények szoftver tekintetében:
-3-
• Operációs rendszer: Windows 2000 Server Windows 2003 Server, Standard Edition Linux disztribúciók Mac OSX 10.4 és felette • Java Runtime Environment 1.5 (az újabb verzióknak 1.6) Hardver igény: • Fejlesztés / alacsony terhelés ◦ x86 kompatibilis CPU (Pentium 4, 3.2 GHz , Intel Duo Core 2, PentiumD) ◦ 1 GB elérhető memória ◦ 100MB / 1GB Ethernet ◦ 200 MB szabad diszk (SATA II) • Ajánlott (magasabb terhelés) ◦ Dual-core / Quad Core (Intel XEON 2Ghz, Opteron 2Ghz ) ◦ 2 - 4 GB vagy több szabad memória ◦ 1GB Ethernet ◦ 200 MB szabad diszk (10K RPM SATA II \ SCSI RAID 1-5) ◦ Network Storage Cluster Solution nagy mennyiségű adat esetén
Alkalmazásfejlesztés Red5 szerverre Az alábbiakban egy igen egyszerű minta alkalmazáson
keresztül fogom bemutatni, hogy lehet
nekikezdeni egy ilyen alkalmazás fejlesztésének. Egy olyan flash programot fogok bemutatni, ami távoli függvényhívás segítségével összead két számot és a képernyőre írja. A feladat programozási szempontból nem kimondottan komplex, a célja, hogy bemutassa, hogy lehet nekikezdeni a red5 programozásnak. Jelen leírás a 0.9.1-es Red5 kiadásra vonatkozik, a korábbi kiadásokban bizonyos funkciók kissé eltérően működhetnek.
Red5 telepítése Első lépésként fel kell telepíteni a Red5 szervert. A forrás, vagy a futtatható állomány szabadon letölthető a http://red5.org/wiki/Releases oldalról. A futtatáshoz Java futtatókörnyezetre van szükség. A linuxos verzió a red5.sh szkript futtatásával indítja a szervert.
-4-
Szerver oldal programozása Programunk szerver oldalának elkészítéséhez célszerű valamilyen Java fejlesztői környezetet használni. Eclipse EE-ben például a következő lépéseket követve tudjuk megvalósítani a programot. 1
Új Java projektet indítunk „demo” néven.
2
Készítünk egy új könyvtárat WEB-INF néven. Ez fogja tartalmazni az alkalmazást.
3
Ezen belül hozzuk létre a src, és classes könyvtárakat
4
Az src könyvtárat állítsuk be forráskönyvtárnak. (Jobb klikk → Build path → Use as source folder)
5
A fordító kimenetét állítsuk a classes könyvtárra. (Projekt nevén jobbklikk → Properties → Java Build Path → Source lapon a Default output foldert állítsuk be demo/classes-re.
6
Ugyanitt a Libraries lapon az „Add external jars” menüponton keresztül adjuk hozzá a telepített Red5 gyökérkönyvtárában lévő red5.jar fájlt.
7
Hozzunk létre egy új package-t „demo” néven s ezen belül egy „Application” class-t.
8
A létrehozott osztályt módosítsuk az alábbiak szerint:
package demo; import org.red5.server.adapter.ApplicationAdapter; public class Application extends ApplicationAdapter{ public double add(double a, double b){ return a+b; } } 9
A WEB-INF könyvtárban szükségünk lesz három fájlra, ami alapján a Red5 el tudja indítani az
alkalmazást: 9.1
web.xml
A display-name és a webAppRootKey szekciókban adjuk meg alkalmazásunk nevét az alábbiak szerint: <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
-5-
version="2.4">
demo
<param-name>webAppRootKey <param-value>/demo
<servlet> <servlet-name>rtmpt <servlet-class>org.red5.server.net.rtmpt.RTMPTServlet 1
<servlet-mapping> <servlet-name>rtmpt /fcs/*
<servlet-mapping> <servlet-name>rtmpt /open/*
<servlet-mapping>
-6-
<servlet-name>rtmpt /close/*
<servlet-mapping> <servlet-name>rtmpt /send/*
<servlet-mapping> <servlet-name>rtmpt /idle/*
9.2
red5-web.properties
webapp.contextPath=/demo webapp.virtualHosts=*
9.3
red5-web.xml
Itt a web.handler szekciót kell kitölteni package.class formátumban.
-7-
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd">
<property name="location" value="/WEB-INF/red5-web.properties" />
<property name="server" ref="red5.server" /> <property name="parent" ref="global.scope" /> <property name="context" ref="web.context" /> <property name="handler" ref="web.handler" /> <property name="contextPath" value="${webapp.contextPath}" /> <property name="virtualHosts" value="${webapp.virtualHosts}" />
Ezzel elkészítettük a programunkhoz tartozó szervert. Másoljuk be az elkészített projekt gyökérkönyvtárát a Red5 webapps könyvtárába, majd indítsuk újra a szolgáltatást.
-8-
Kliens oldal programozása Amikor a felhasználók felmennek az adott weboldalra egy Flash programot töltenek le a gépükre. Ezt az SWF állományt elkészíthetjük Adobe Flash, vagy open-source programmal is. Jelen esetben a Motion Twin Actionscript 2 Compiler nevű nyílt forrású szoftvert fogjuk használni. Ubuntu alatt elérhető az mtasc csomag részeként. Készítsük el az alábbi szkriptet: import flash.events.*; import flash.net.*; import flash.net.Responder.*;
class szamolo { static var app:szamolo;
function szamolo(){ _root.createTextField("doboz",0,0,0,400,300); _root.doboz.text="20 + 22 = "; _root.nc = new NetConnection(); _root.nc.connect("rtmp://localhost/demo");
_root.nc.onResult=function(obj){ _root.doboz.text+=obj; }; _root.nc.call("add",_root.nc,20,22); } static function main(mc) { app = new szamolo();
-9-
} } A fenti program a következőt teszi: Csatlakozik a localhoston futó Red5 szerver „demo” alkalmazásához rtmp porton keresztül, majd meghívja a szerveren lévő „add” függvényt és az így kapott eredményt a „doboz” nevű szöveges mezőbe írja. Fordítsuk le swf formátumba az mtasc programmal az alábbi parancs segítségével: mtasc -swf szamolo.swf -main -header 300:400:10 szamolo.as Ha az így kapott flash animációt megnyitjuk egy böngészőből, akkor az a „20 + 22 = 42” szöveget írja ki. Amennyiben a szerver oldallal gond lenne, akkor a fenti kiírásból a „42” hiányozni fog, hiszen azt a kiszolgálótól kapja. A hibakeresésben a legnagyobb segítséget a Red5 kimenete nyújthatja. Ezzel gyakorlatilag elkészítettünk egy kliens-szerver architektúrán RTMP protokollal kommunikáló egészen egyszerű programot. További működő példákat a futó Red5 szerven tekinthetünk meg a http://localhost:5080 címen. Előbb telepíteni kell a minta alkalmazásokat, ezt követően lehetséges a futtatásuk. Találunk itt egyszerű osztott objektum kezelésre, video streamingre, port állapot ellenőrző példákat. A Red5 lehetőséget biztosít komolyabb szoftverek készítésére is. Ennek egyik szép példája az Openmeetings.
Openmeetings Az Openmeetings egy ingyenes, nyílt forrású, böngészőben futó videokonferenciát és ezt támogató szoftvereket tartalmazó programcsomag. Az alábbi ábrán látható az Openmeetings architektúrája.
- 10 -
ábra 1: Openmeetings architektúrája
A kliens oldalon egy böngészőben futó Flash alkalmazás továbbítja az információt a szerver felé, illetve biztosít a felhasználó számára kezelőfelületet. Egy konferencia szobában lehetőség van fájlok megosztására, szavazásra, whiteboard használatára valamint szöveges üzenetek küldésére a hagyományos hang és kép átvitel mellett.
- 11 -
Az alapvető funkcionalitáshoz szükséges egy adatbázis szerver is. Jelen esetben MySQL-t használtam, de lehetséges PostgreSQL, MSSQL, DB2, Oracle, stb. kiszolgáló használata is. A rendszer használata során amennyiben meghívókat szeretnénk használni, egy mail szerverre is szükség van. Annak érdekében, hogy a konferenciaszobákban fájlokat lehessen feltölteni, illetve ezeket a táblára ki lehessen vetíteni; egyéb szoftverekre van szükség, többek között egy szerver módban futó OpenOffice-ra, valamint konverterekre, mint például az SWFtools, ImageMagick és GhostScript.
Openmeetings telepítése A következőkben ismertetni fogom az openmeetings forrásból való telepítését. Kiindulópontunk egy Sun Virtualbox 3.14 virtuális gépben futó frissen telepített Debian Linux 5.03, melyre az alaprendszeren kívül csak sudo és egy ssh szerver került telepítésre. A géphez 1 db 1.8 GHz CPU és 1GB memória volt hozzárendelve. A telepítés 3 lépésből áll: 1.
Előkövetelmények telepítése
2.
Openmeetings fordítás és telepítés
- 12 -
3.
Néhány kiegészítő lehetőség telepítése
1. Előkövetelmények telepítése
Szükségünk lesz java futtatókörnyezetre Ha még nem lenne benne a /etc/apt/sources.list-ben az alábbi sor, akkor tegyük bele: deb http://ftp.de.debian.org/debian lenny main contrib non-free
apt-get update apt-get install sun-java6-jre sun-java6-jdk Háttér adatbázisnak mysql-t fogok használni, de lehetőség van PostgreSQL, Oracle, MSSQL használatára is. (A támogatott adatbázisokról részletesen: https://www.hibernate.org/80.html) apt-get install mysql-server phpmyadmin
Kell egy verziókövető szoftver kliens apt-get install subversion 2. Openmeetings fordítás és telepítés 2.1 Forrás letöltése A legfrissebb forrás letöltéséhez adjuk ki az alábbi parancsot:
svn co http://openmeetings.googlecode.com/svn/trunk/singlewebapp/
A művelet a hálózati erőforrások terheltségétől függően néhány percet vesz igénybe bár néha elég sokáig eltarthat. A forrást ant java fordítóval fogjuk lefordítani (bővebben: http://ant.apache.org/ ) apt-get install ant
- 13 -
2.2 Fordítás Fordításhoz lépjünk be a letöltött könyvtárba
cd singlewebapp
majd adjuk ki az
ant -f build_red5webapp.xml dist
parancsot. Ha minden jól megy, akkor néhány percen belül a „BUILD SUCCESSFUL” üzenettel tájékoztat minket a fordítás sikerességéről. Megjegyzés: Amennyiben a gépben 1GB-nál kevesebb memória van, előfordulhat, hogy a java fordító kifogy a memóriából (could not reserve enough memory). Ez esetben nekem az alábbi megoldás vezetett sikerre: a /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/i386/jvm.cfg végére a -Xms512m -Xmx1024M sorokat.
Megjegyzés: Ha a fordítás során Unable to find a javac compiler; hibaüzenettel leáll, akkor egy export JAVA_HOME=/usr/lib/jvm/java-6-sun/jre/ parancs kiadását követően próbáljuk újra (természetesen ez 1.6-os Sun Java esetén érvényes).
2.3 Telepítés 2.3.1 Adatbázis előkészítése Az Openmeetings beépített telepítője automatikusan létrehozza az adatbázis struktúráját. Ehhez azonban először létre kell hozni az adatbázist. Ezt megtehetjük mysql konzolból, vagy phpmyadmin webes felületén keresztül is. Ez utóbbit fogom ismertetni:
- 14 -
−
http://[szerverip]/phpmyadmin
−
Privilégiumok → Új felhasználó hozzáadása
Itt adjunk meg egy felhasználónevet (pl.: openmeetings) −
Database for user szekcióban válasszuk a „Create database with same name and grant all
privileges” opciót, majd Végrehajt. −
Megjegyzés: Amennyiben utf-8 karakterket támogató nyelvet (pl.: magyar) szeretnénk használni,
akkor érdemes az adatbázis karakterhasználatát átállítani „utf8_hungarian_ci”-re. (Phpmyadminban ez Tevékenységek → Egybevetés alatt) 2.3.2 Adatbázis-kapcsolat beállítása A singlewebapp/dist/red5/webapps/openmeetings/conf/hibernate.cfg.xml fájl elején a kövéren szedett részben állítsuk be az általunk megadott felhasználónév, jelszó, adatbázisnév értékeket. <session-factory>
<property name="connection.username">openmeetings <property name="connection.password">JELSZÓ
<property name="connection.driver_class">com.mysql.jdbc.Driver <property name="dialect">org.hibernate.dialect.MySQLMyISAMDialect <property name="connection.url">jdbc:mysql://localhost/openmeetings?autoReconnect=true&useUni code=true&crea$...
- 15 -
2.3.3 Openmeetings telepítése Indítsuk el a szervert. (Ehhez futtathatóvá kell tenni a singlewebapp/dist/red5/red5.sh fájt → chmod +x red5.sh )
cd singlewebapp/dist/red5/ ./red5.sh
Ezt követően böngészővel látogassunk el a
http://[szerverip]:5080/openmeetings/install
oldalra Itt a Step1-ben adjuk meg az adminisztrátor felhasználónevét, jelszavát, emailcímét illetve egy tetszőleges Organisation nevet, esetleg az alkalmazás alapértelmezett nyelvét. A többi beállítással egyelőre ne foglalkozzunk, majd a későbbiek során lépésről lépésre feltelepítjük ezeket a lehetőségeket is. Ha minden jól ment, akkor az INSTALL-ra kattintást követően néhány percen belül az Openmeetings - Installation Complete! Üzenet fogad. A következő sorban lévő http://[szerverip]:5080/openmeetings linkre kattintva elérhetjük telepített alkalmazásunkat. 3. Néhány kiegészítő lehetőség telepítése Az eddigiekben ismertetett lépések során feltelepített openmeetings alapvető videokonferencia tevékenységeket támogat. Lehet felhasználókat, konferencia szobákat létrehozni, lehetőség van konferenciák lefolytatására is. Képeket lehet feltölteni, ezeket a táblára „kivetíteni”, de például dokumentumok kivetítésére és azok pdf formátumban való letöltésére már nincs lehetőség. Ennek érdekében telepíteni kell néhány segédprogramot.
apt-get install imagemagick gs-gpl libart-2.0-2 libgif4 xvfb openoffice.org
- 16 -
wget
http://de.archive.ubuntu.com/ubuntu/pool/universe/s/swftools/swftools_0.9.0-
0ubuntu1_i386.deb
dpkg -i swftools_0.9.0-0ubuntu1_i386.deb
Az openoffice egy kis manuális beállítást igényel: A /usr/lib/openoffice/share/registry/data/org/openoffice/Setup.xcu fájba a <node oor:name="Office"> sor után be kell illeszteni az alábbi hármat:
<prop oor:name="ooSetupConnectionURL" oor:type="xs:string"> socket,host=localhost,port=8100;urp
Az openoffice elindításához futtassuk a következő parancsot: xvfb-run --server-args='-screen 0 800x600x16' -a /usr/lib/openoffice/program/soffice -headless -nologo -norestore & Ezt követően a feltöltött dokumentumokról egy kis bélyegkép jelenik meg a feltöltési listában, s ami lényegesebb, táblázatokat és szöveges dokumentumokat jeleníthetünk meg a táblán. Ha szeretnénk a videokonferencia szolgáltatást bootoláskor futtatni, akkor a http://www.debian-
administration.org/articles/28 oldalon található leírás alapján készíthetünk egy init scriptet. Az Openmeetings számos további lehetőséget rejt magában, például képes LDAP authentikációra, és az adminisztrációs felület megkerülésével közvetlen felhasználó regisztrálásra lehetővé téve a szoftver már meglévő infrastruktúrába ágyazását. További információk a projekt honlapján a http://code.google.com/p/openmeetings/ címen találhatók. Itt megtekinthető egy élő bemutató is. Mivel ez nem hazai elhelyezésű szerveren fut, ezért elég magas válaszidővel kell számolni. Az eddigi tapasztalatok azt mutatják, hogy a könnyű kezelhetőségnek és a nyílt forrásból adódó
- 17 -
személyre szabhatóság következtében a szoftver jól használható a távoktatásban és az üzleti életben egyaránt.
Irodalomjegyzék [1] Openmeetings projekt honlap http://code.google.com/p/openmeetings/ [2] Red5 projekt honlap http://red5.org [3] Overview of streaming with Flash Media Server 3
http://www.adobe.com/devnet/flashmediaserver/articles/overview_streaming_fms3_02.html [4] Adobe, RTMP Specification License 2009.
- 18 -