České vysoké učení technické v Praze Fakulta elektrotechnická Softwarové technologie a management
Aplikace pro mobilní zařízení Semestrálná práce z Y36MM1 Akademický rok 2008/2009, LS
Jiří Chadima
[email protected]
Jiří Mašek
[email protected]
Obsah I. Cíle semestrální práce.......................................................................3 II. Technologie....................................................................................4 1. J2ME..........................................................................................4 2. MIDP 2.0.....................................................................................4 3. Mobile Media API (JSR 135)...........................................................4 1. Bluetooth (JSR 82).......................................................................5 3. Implementace.................................................................................7 1. Architektura a vlastnosti aplikace....................................................7 A. Mobilní zařízení – Mobilní zařízení................................................7 B. Mobilní zařízení – Počítač............................................................8 2. Požadavky na mobilní zařízení........................................................8 3. Používání....................................................................................8 4. Závěr............................................................................................9 5. Seznam použité literatury...............................................................10 IV. Přílohy.........................................................................................11 1. Otestovaná mobilní zařízení..........................................................11
Jiří Chadima, Jiří Mašek
Semestrálná práce z Y36MM1
I. Cíle semestrální práce Rozhodli jsme se implementovat a zprovoznit aplikaci pro živé streamování videa zaznamenaného pomocí vestavěného fotoaparátu v telefonu na jiné zařízení vybavené technologií Bluetooth. Jako platformu jsme zvolili J2ME1, která je dnes v mobilních zařízeních standardem.
1 Java Micro Edition -3-
Jiří Chadima, Jiří Mašek
Semestrálná práce z Y36MM1
II. Technologie 1. J2ME J2ME je mobilní verze Javy, která oproti standardní Javě disponuje některými specialitami. Za prvé si musíme uvědomit, že J2ME je podmnožinou standardní edice Javy a musíme se obejít bez některých standardních knihoven. Naopak ale mobilní Java disponuje systémem profilů a kvalitně použitelným systémem návrhu funkcionalit pomocí JSR2. Díky této architektuře se dají mobilní zařízení rozdělit do několika skupin a dá se velice snadno zjistit, zda dané zařízení podporuje knihovny, které my potřebujeme. Pro zvolenou úlohu je potřeba tato konfigurace zařízení.
2. MIDP 2.0 MIDP3 rozšiřuje standard CLDC4, který definuje základní standardy mobilní Javy. Původní MIDP přineslo základní API pro tvorbu mobilních aplikací, obsahuje knihovnu starající se o midlety (samotné mobilní aplikace), podporu pro perzistentní úložiště a v neposlední řadě také balík pro obsluhu GUI5. MIDP 2.0 zareagovalo na příchod multimédií mezi telefony a vývojový tým připravil programátorům API pro práci právě s přehráváním audia a videa a také balík pro tvorbu GUI mobilních her. Práce s multimédii ve standardu MIDP 2.0 však není úplně dokonalá. Existuje JSR nazvané Mobile Media API, které MIDP 2.0 implementuje jen zčásti. Celá implementace sice existuje, její podpora ale není podmínkou pro zařazení mobilního telefonu mezi zařízení podporující MIDP 2.0.
3. Mobile Media API (JSR 135) Mobile Media API tedy přináší kvalitní podporu pro multimédia a zavádí možnost zaznamenávání audia či videa, nebo generování tónů. Základním principem je komunikace mezi zdrojem dat (DataSource) a přehrávačem (Player). Nad těmito dvěma třídami dlí Manager, který je obsluhuje. Následující ukázka kódu pochází přímo z dokumentace JSR 135 a je nazvaná zaznamenávání a nahrávání (Capturing and Recording). 2 3 4 5
Java Specification Request Mobile Information Device Profile Connected Limited Device Configuration Graphical User Interface -4-
Jiří Chadima, Jiří Mašek
Semestrálná práce z Y36MM1
1. try { 2. // Vytvor DataSource zaznamenavajici zive audio. 3. Player p = Manager.createPlayer("capture://audio"); 4. p.realize(); 5. // Ziskej RecordControl, nastav umisteni pro nahravku a 6. // spust Player tak, aby nahraval 5 vterin 7. RecordControl rc = (RecordControl)p.getControl("RecordControl"); 8. rc.setRecordLocation("file:/tmp/audio.wav"); 9. rc.startRecord(); 10. p.start(); 11. Thread.currentThread().sleep(5000); 12. p.stop(); 13. rc.stopRecord(); 14. rc.commit(); 15.} catch (IOException ioe) { 16.} catch (MediaException me) { 17.} catch (InterruptedException e) { }
K fotoaparátu (kameře) se přistupuje stejně, pomocí protokolu capture://video. Tento řetězec je takzvaný Media Locator, který specifikuje cestu ke zdroji dat. Nabízí například varianty pro lokální zdroje, zdroje přístupné přes RTP6 nebo pro radiový signál. Zabudovaná je i podpora protokolu HTTP.
1. Bluetooth (JSR 82) Specifikace JSR 82 je programové rozhraní vyvinuté komunitou JCP7, jenž umožňuje mobilním aplikacím na podporovaných zařízeních přístup k Bluetooth.
Obr. 1: Bluetooth Protocol Stack a jeho vrstvy
Rozhraní dále podporuje možnost využití různých protokolů Bluetooth (Obr. 1), nicméně jelikož cílem práce je pouhé streamování 6 Real-time Transport Protocol 7 Java Community Process -5-
Jiří Chadima, Jiří Mašek
Semestrálná práce z Y36MM1
videa, bohatě zde vystačí protokol RFCOMM8, jenž je též znám jako „virtuální sériový port.“ Specifikace v neposlední řadě podporuje architekturu klient server, přičemž v následujících dvou diagramech je znázorněn postup, jakým server (Obr. 2) s klientem (Obr. 3) navazují spojení.
Obr. 2: Sekvenční diagram zobrazující interakci serveru při navazování spojení.
Obr. 3: Sekvenční diagram zobrazující interakci klienta při navazování spojení.
8 Radio Frequency Communication -6-
Jiří Chadima, Jiří Mašek
Semestrálná práce z Y36MM1
3. Implementace 1. Architektura a vlastnosti aplikace Úloha se nám nakonec trochu přiohla a rozvětvila na dvě části. V následujících odstavcích se vám pokusíme přiblížit, jak tato řešení fungují. První variantou je komunikace mezi dvěma mobilními zařízeními, druhou pak komunikace mezi mobilním zařízením a počítačem.
A. Mobilní zařízení – Mobilní zařízení Pro aplikaci jsme obecně zvolili architekturu klient-server (vysílač-přijímač). Celou aplikaci řídí MainMidlet, který je jakýmsi controllerem. Příkazy od uživatelů jsou zpracovávány objektem třídy Commander, který implementuje rozhraní CommandListener a stává se jediným obsluhovačem událostí v celé aplikaci. Server i klient jsou zahrnuti v jedné aplikaci a není tak potřeba víc obsluhujících midletů. Zásadní funkcionalitou je hledání okolních zařízení, na kterých je spuštěn náš přijímací server. To je zajištěno v balíku devicediscovery, který se sestává z třídy obsluhující samotnou detekci a třídy reprezentující obrazovku, na níž se nalezené telefony objevují. Na stejné obrazovce má také uživatel možnost spustit server. Třídy obsluhující server jsou uloženy v balíku server. Jestliže je spuštěn server, zařízení se zviditelní pro okolní přístroje a očekává připojení jednoho klienta. Poté v nekonečné smyčce přijímá data z tohoto vysílače, dokud server nezastavíme. Klient se spustí po vybrání serveru, na který chceme posílat data. Předpoklad byl takový, že v reálném čase budeme odesílat celé video. Tady se však ukázaly limity mobilní Javy. Specifikace takové využití podporuje a nabízí, neobjevili jsme však žádný emulátor, který by uvedenou funkcionalitu poskytoval. Rozhodli jsme se tedy původní záměr malinko přehodnotit a aplikaci upravit tak, aby na vyžádání posílala tzv. snapshoty (snímky). Není ale problém aplikaci upravit tak, aby snapshoty posílala automaticky ve zvoleném intervalu, a je možné, že nakonec budeme prezentovat tuto automatickou variantu. A proč nejde streamovat přímo video? Podle specifikace má nahrávání zajišťovat objekt třídy RecordControl. Pro práci s videem však jeho podpora není implementována, a ačkoliv by se s jeho pomocí tato úloha dala zvládnout velice elegantně, není možné toto řešení efektivně otestovat, protože jednoduše není na čem. Při každém řešení se ale hlavně musí brát zřetel na technologické možnosti Bluetooth. Standardní přenosová rychlost se obecně udává -7-
Jiří Chadima, Jiří Mašek
Semestrálná práce z Y36MM1
někde na úrovni dvou megabitů, v praxi se na to však nedá spolehnout. Je proto potřeba při řešení s odesíláním celého videa vhodně nastavit jeho kvalitativní parametry (rozměry, barevná hloubka, komprese), v případě odesílání jednotlivých obrázků můžeme leccos ovlivnit i frekvencí.
B. Mobilní zařízení – Počítač Pro účely prezentace jsme se také rozhodli vytvořit jednoduchou desktopovou aplikaci, která bude zobrazovat snapshoty odesílané z mobilního zařízení. Desktopová aplikace se od té mobilní prakticky vůbec neliší, neboť obsahuje zcela totožnou třídu Server, přičemž knihovny mobilní Javy, jenž standardně implementují rozhraní JSR 182, zde byly pouze nahrazeny knihovnou avetanaBluetooth v případě verze aplikace pro Linux a knihovnou BlueCove pro Windows a Mac.
2. Požadavky na mobilní zařízení Pro běh aplikace je potřeba mít telefon, nebo jiné zařízení s mobilní verzí Javy, které podporuje profily MIDP 2.0 a CLDC 1.0, a obsahuje podporu pro Bluetooth a MMAPI. Většina telefonů mladších dvou let tyto požadavky bez problému splňuje, avšak v praxi se „chytřejší telefony“ ukázaly být velkým problémem. Pokusy o spuštění aplikace v prostředí Windows Mobile dopadly zcela neúspěšně. Příčinu problému se nám nicméně nepodařilo odhalit. Triviálním požadavkem je též přítomnost kamery na vysílacím zařízení.
3. Používání Aplikace mezi dvěma mobilními telefony funguje jak v emulátoru integrovaném přímo v NetBeans 6.5, tak i v Sun Wireless Toolkit. Při provozu aplikace na reálném zařízení může být řada zabezpečovacích mechanismů mobilní Javy pro uživatele dosti omezující. Stručně řečeno při každé zásadnější operaci vyžaduje mobilní zařízení uživatelův souhlas daným, přičemž největším problémem je žádost o potvrzení při každém pořízení snapshotu. Výrobci by však měli vesměs podporovat možnost vypnutí těchto opatření, takže pokud se s tímto problémem setkáte i ve vašem zařízení, zapátrejte v nastavení oprávnění aplikace a možná budete -8-
Jiří Chadima, Jiří Mašek
Semestrálná práce z Y36MM1
úspěšní. Provoz aplikace mezi mobilním zařízením a počítačem pak už jen vyžaduje PC s Bluetooth a mobilní zařízení vyhovující výše uvedeným podmínkám.
-9-
Jiří Chadima, Jiří Mašek
Semestrálná práce z Y36MM1
4. Závěr Naučili jsme se pracovat s mobilní edicí Javy a prozkoumali jsme její multimediální možnosti. Ačkoliv to tak nevypadá, je to nástroj vskutku mocný a my jsme z něj využili jen velmi málo. Podpora Bluetooth je naprosto vynikající a vytvoření spojení není nijak obtížné a obdobně se to má i s multimédii. Zvolený přístup k práci s nimi je velice intuitivní a jejich používání je snadné. Momentálně snad jen zamrzí, že specifikace není zcela dotažená. Vývoj jde ale velice rychle dopředu a věřím tomu, že v dalších ročnících se některému z týmu podaří úlohu přenášející video v reálném čase implementovat. Zhruba za rok a půl by se měl komerčně rozšířit nový Bluetooth standard schopný rychlejších přenosů a zařízení podporující víc a víc z multimediálních specifikací se objevují snad každým dnem. Velice zajímavou a překvapivou situací tak byla skutečnost, že aplikace se nekamarádí s Windows Mobile. Čekali jsme, že „velký“ operační systém bude Javu podporovat lépe. Nutno také říci, že internet je plný příkladů, dokumentů a tutoriálů, jak s mobilní Javou, potažmo multimédii pracovat. Zajímavým článkem je [6], kde autor zkoumá možnosti příjmu různých multimediálních formátů pomocí mobilní Javy. Ačkoliv se nám tedy tak úplně nepovedlo naplnit prvotní cíl naší práce, doufáme, že řešení, které se nám nakonec povedlo sestavit alespoň částečně dokáže nahradit přenos plnohodnotného videa.
- 10 -
Jiří Chadima, Jiří Mašek
Semestrálná práce z Y36MM1
5. Seznam použité literatury 1. Wikipedia contributors. Wikipedia : Java APIs for Bluetooth [online]. Wikipedia, The Free Encyclopedia. , 2005 , last modified on 16 April 2009 [cit. 2009-05-10]. Dostupný z WWW:
. 2. SOHAM, Sengupta. Wireless control of a hand held mobile device using bluetooth and java. [online]. 2006 [cit. 2009-05-10]. Dostupný z WWW: . 3. BRUCE, Hopkins. Using the JSR-82 API for OBEX Image Transfers. Sun Developer Network [online]. 2006 [cit. 2009-05-10]. Dostupný z WWW: . 4. The MMAPI Expert Group. Dokumentace k JSR 135, Mobile Media API [online]. 2006 [2009-05-31]. Dostupný z www: 5. GOYAL, Vikram. J2ME Tutorial, Part 4: Multimedia and MIDP 2.0 [online]. 2005 [cit. 2009-05-31]. Dostupný z www: 6. GOYAL, Vikram. Experiments in Streaming Content in Java ME [online]. 2006 [cit. 2009-05-31]. Dostupný z WWW:
- 11 -
Jiří Chadima, Jiří Mašek
Semestrálná práce z Y36MM1
IV. Přílohy 1. Otestovaná mobilní zařízení Sony Ericsson W810i
Úspěšně
Nokia 6131
Úspěšně
Sony Ericsson X1
Neúspěšně
- 12 -
Ve Windows Mobile 6.0 nebylo možné aplikaci vůbec spustit.