11 j2me multimedia v1

70
© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 1 Multimédia szolgáltatások Java ME platformon Budapesti Műszaki és Gazdaságtudományi Egyetem Automatizálási és Alkalmazott Informatika Tanszék Ekler Péter

Upload: sweidan-omar

Post on 16-Oct-2014

110 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 1

Multimédia

szolgáltatások Java ME

platformon

Budapesti Műszaki és Gazdaságtudományi Egyetem

Automatizálási és Alkalmazott Informatika Tanszék

Ekler Péter

Page 2: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 2

Gyorskérdés

Melyik függvény használható képek

beolvasására a kameráról?

Page 3: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 3

Tartalom

Bevezetés

Multimédia szolgáltatások mobil eszközökön

Multimédia API ismertetése

Az API működése

Kamerakezelés Java ME platformon

A kamera képének megjelenítése

Kép beolvasása kameráról

Hangok felvétele és lejátszása Java ME platformon

Hangfelvételi lehetőségek

Hanglejátszás mobil eszközökön

Összefoglalás

Teszt

Page 4: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 4

Bevezetés

Multimédia szolgáltatások bővülése

Multimédia funkciók egyszerűbb

mobiltelefonokban

Legfontosabb szolgáltatások:

Kamera kezelése

Hanganyagok kezelése (zenelejátszás)

Videók, filmek lejátszása (egyre népszerűbb)

Page 5: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 5

Multimédia funkciók népszerűsége

A növekvő tárkapacitás lehetővé teszi a

multimédia anyagok tárolását az eszközön

Multimédia tartalmak felhasználása,

szerkesztése mobil alkalmazásokban

Multimédia tartalmak megosztása

Zenék, videók megosztása

Mobil szélessáv terjedése

Page 6: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 6

Tartalom

Bevezetés

Multimédia szolgáltatások Java ME platformon

Multimédia API ismertetése

Az API működése

Kamerakezelés Java ME platformon

A kamera képének megjelenítése

Kép beolvasása kameráról

Hangok felvétele és lejátszása Java ME platformon

Hangfelvételi lehetőségek

Hanglejátszás mobil eszközökön

Példa alkalmazás képek kezelésére

Összefoglalás

Teszt

Page 7: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 7

Az MMAPI bemutatása

A legtöbb Java ME konfiguráción

alkalmazható, például: CDC, CLDC, stb.

A Java ME Wireless Toolkit (emulátor)

támogatja az MMAPI-t

Az emulátor a kamerát is képes emulálni

Page 8: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 8

Az MMAPI jellemzői

Támogatja hangok generálását, felvételét

és visszajátszását (szigorú memórialimittel

dolgozik) - OutOfMemoryError

Széleskörű protokoll és tartalom

támogatás: az API nem szorítkozik

semmilyen protokoll, vagy formátum

megkötésre

Bővíthetőség

Többféle lehetőség a fejlesztők kezében

Page 9: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 9

MMAPI – MIDP 2.0

javax.microedition.media

JSR-135 tartalmazza

Multimédiás képességekkel rendelkező

mobiltelefonok számára készült

Cél: erőforrás takarékos módon a

multimédia funkciók elérése Java ME

alkalmazásból

Page 10: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 10

MMAPI követelmények

Multimédia tartalom lejátszása

Multimédia tartalom előállítása

Lejátszási/felvételi folyamatok vezérlése:

start/stop/pause/stb.

Médiához kapcsolódó tulajdonságok

beállítása: hangerő, lejátszás ismétlés, stb.

Tulajdonságok lekérdezhetősége

Page 11: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 11

Tartalom

Bevezetés

Multimédia szolgáltatások Java ME platformon

Multimédia API ismertetése

Az API működése

Kamerakezelés Java ME platformon

A kamera képének megjelenítése

Kép beolvasása kameráról

Hangok felvétele és lejátszása Java ME platformon

Hangfelvételi lehetőségek

Hanglejátszás mobil eszközökön

Összefoglalás

Teszt

Page 12: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 12

Multimédia Feldolgozás I.

Page 13: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 13

Multimédia Feldolgozás II.

Manager: legfelsőbb szintű factory jellegű vezérlőosztály

Feladata a Player objektumok létrehozása, információt biztosít az rendszer képességeiről (formátum, protokoll)

Egyszerű felületet nyújt tone-ok (hangok) lejátszására

Content-type alapján történik a formátum azonosítása

Player: a multimédia tartalmat lejátszó interface

Lekérdezhető, hogy mely Control-okkal rendelkezik az adott Player

Control: a Player beállításait kezelő interface

Hangerő: VolumeControl

Page 14: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 14

Manager osztály I.

javax.microedition.media.Manager

Player létrehozása Stream, vagy hely

megadásával:

static Player

createPlayer(java.io.InputStream

stream, String type)

static Player createPlayer(String

locator)

Page 15: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 15

Manager osztály II.

A Manager osztályban található a createPlayer()

függvényt, amellyel a player objektumok

létrehozhatók:Player player = Manager.createPlayer(String locator);

locator: a protokoll és a tartalom

meghatározására használható a következő

formátumban: <protocol>:<content location>

A visszakapott Player objektum függvényeivel

vezérelhető az adott média

Page 16: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 16

Manager osztály III.

Szintetizált hang lejátszása:

static void playTone(int note, int

duration, int volume)

Kezelt formátumok és protokollok lekérdezése:

static String[]

getSupportedContentTypes(String

protocol)

static String[]

getSupportedProtocols(String

content_type)

Page 17: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 17

Multimédia információk lekérdezése - példa

public void writeInfos()

{

mainForm.append("Midi device locator: "+Manager.MIDI_DEVICE_LOCATOR+"\n");

mainForm.append("Tone device locator: "+Manager.TONE_DEVICE_LOCATOR+"\n");

// Kezelt tartalmak és protokollok lekérdezése

String[] tempContentTypes=Manager.getSupportedContentTypes(null);

for (int i=0; i<tempContentTypes.length; i++)

{

String[] tempProtocols= Manager.getSupportedProtocols(tempContentTypes[i]);

mainForm.append("PROTOCOLS to: "+tempContentTypes[i]+"\n");

for (int j=0; i<tempProtocols.length; i++)

{

mainForm.append(tempProtocols[j].toString()+"\n");

}

}

}

Page 18: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 18

Player életciklus

javax.microedition.media.Player

Page 19: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 19

Player állapotok

Unrealized: kezdeti állapot

Realized: a média lejátszásához minden információa rendelkezésünkre áll (időigényes lehet az állapotba lépés!)

Prefetched: a média lejátszásának indításához minden elővan készítve

Started: a média lejátszás alatt van

Closed: az összes erőforrást felszabadítja a rendszer

Page 20: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 20

Player állapotváltás

Amikor a player létrejött, UNREALIZED állapotba kerül

A realize() függvényt meghívva kerül REALIZED állapotba és inicializálásra kerülnek azok az információk, amelyek a player-nek szükségesek az adott média eléréséhez

A prefetch() függvényt meghívva a player a PREFETCHED állapotba kerül, létrehozza a hálózati kapcsolatokat, valamint további inicializálásokat hajt végre. Meghívásával a player tényleges indításának ideje minimalizálható

A start() metódus segítségével a player a STARTED állapotba kerül, ahol a tényleges média feldolgozására kerül sor

A PREFETCHED, vagy STARTED állapotban a deallocate() függvény hívásakor a rendszer az erőforrásokat felszabadítja és a player újra REALIZED állapotba kerül

STARTED állapotban a stop() függvény hívásakor a player ismét visszakerül a start előtti PREFETCHED állapotba

Amikor a feldolgozás befejeződött, a player automatikusan visszakerül a PREFETCHED állapotba

A close() függvényt meghívva kerül a player CLOSED állapotba

Page 21: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 21

Player létrehozása – példák I.

Audio:

capture://audio: hang beolvasása az alapértelmezett beolvasó eszközről

capture://devmic0?encoding=pcm: hang beolvasása a devmic0 eszközről

Video:

capture://video: videó, vagy kép beolvasása a készülék alapértelmezett videó eszközéről

capture://devcam0?encoding=rgb888&width

=100&height=50: videó, vagy kép beolvasása a devcam0 készülékről (például másodlagos kamera), rgb888-as felbontással, megadott szélességben és magasságban

Page 22: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 22

Player létrehozása – példák II.

Rádió:

capture://radio?f=105.1&st=stereo:

rádió az 105.1-es FM frekvencián

Streaming:

rtp://host:port/type: streaming, ahol a

típus „video”, „audio”, vagy „text” lehet

Multimédia adat a Web-en:

http://webserver/music.wav:

Interneten elérhető hangfájl lejátszása

Page 23: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 23

Player függvények I.

Player eseménykezelő hozzárendelése és

eltávolítása:

void addPlayerListener(PlayerListener

playerListener)

void removePlayerListener(PlayerListener

playerListener)

A média lejátszás ismétléseinek száma (-1

paraméter: amíg le nem állítjuk):

void setLoopCount(int count)

Page 24: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 24

Player függvények II.

A média hossza mikroszekundumban, a

lejátszás aktuális idejének lekérdezése,

valamint beállítása:

long getDuration()

long getMediaTime()

long setMediaTime(long aLength)

Page 25: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 25

PlayerListener interface

javax.microedition.media.PlayerListe

ner

public void playerUpdate(Player

player, String event, Object

eventData)

player: A lejátszó, amely az eseményt generálta

event: A generálódott esemény String típusú azonosítója (STARTED, STOPPED, END_OF_MEDIA, DURATION_UPDATED, DEVICE_UNAVAILABLE, DEVICE_AVAILABLE, VOLUME_CHANGED, ERROR, CLOSED)

eventData: Az eseményhez kapcsolódó egyéb adatok

Page 26: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 26

EventData adatok

Mikor indult a lejátszás

Mikor állt le a lejátszás

Mikor fejeződött be a lejátszás

Mekkorára módosult a lejátszás időtartama

VolumeControl objektum, melytől

lekérdezhetők az adatok

A keletkezett hiba leírása

Page 27: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 27

Multimédia vezérlők

A vezérlők a player objektumoktól kérhetők el, használhatók a multimédia eszközök irányítására:

CameraControl

VideoControl

ZoomControl

FocusControl

SnapshotControl

VolumeControl

Például: VideoControl videoControl =

(VideoControl)(player.getControl("VideoControl"));

Page 28: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 28

Vezérlők lekérdezése

Készítsünk egy alkalmazást, mely megjeleníti az adott player-hez tartozó vezérlőket:

public void getControls(String aPlayer)

{

try {

player=Manager.createPlayer(aPlayer);

player.realize();

} catch (IOException ex) {

ex.printStackTrace();

} catch (MediaException ex) {

ex.printStackTrace();

}

if (player!=null) {

Control[] tempControls = player.getControls();

for (int i=0; i<tempControls.length; i++) {

mainForm.append(tempControls[i].toString());

}

}

}

Page 29: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 29

Vezérlők listája emulátoron különböző Playerek-hez

Page 30: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 30

Tartalom

Bevezetés

Multimédia szolgáltatások mobil eszközökön

Multimédia API ismertetése

Az API működése

Kamerakezelés Java ME platformon

A kamera képének megjelenítése

Kép beolvasása kameráról

Hangok felvétele és lejátszása Java ME platformon

Hangfelvételi lehetőségek

Hanglejátszás mobil eszközökön

Összefoglalás

Teszt

Page 31: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 31

Kamera mobiltelefonokban

A modern mobil készülékek egyik alapvető

tartozéka manapság már a kamera

Kamera eszköz elérése mobil alkalmazásokból

Különféle beállítások:

Felbontás

Minőség

Zoom

Stb.

A kamera kreatív felhasználása

Page 32: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 32

Alapértelmezett kamera eszköz létrehozása

Player létrehozása a capture://video

paraméterrel:

Player player=

Manager.createPlayer("capture://vi

deo");

VideoControl létrehozása:

VideoControl videoControl=

(VideoControl)(player.getControl("

VideoControl"));

Page 33: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 33

VideoControl megjelenítése

Object initDisplayMode(int mode,

java.lang.Object arg)

int mode:

USE_DIRECT_VIDEO: ha például Canvas-on

szeretnénk megjeleníteni a kamera képét

USE_GUI_PRIMITIVE: ha például egy GUI elemként

szeretnénk hozzáfűzni egy Form-hoz

Object arg:

A Canvas objektum, ha a USE_DIRECT_VIDEO

módot választottuk

Page 34: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 34

VideoControl elhelyezése Form-on

Player player=Manager.createPlayer("capture://video");

player.realize();

VideoControl videoControl=(VideoControl)(player.getControl("VideoControl"));

if (videoControl != null){mainForm.append((Item)(videoControl.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE,null)));

}

player.start();

Page 35: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 35

VideoControl elhelyezése Canvas-on I.

public class MyCameraCanvas extends Canvas {

private HelloMidlet midlet;

/** Creates a new instance of MyCameraCanvas */

public MyCameraCanvas(HelloMidlet aMidlet) {

midlet = aMidlet;

}

protected void paint(Graphics graphics) {

graphics.setColor(0,0,0);

graphics.fillRect(0,0,getWidth(),getHeight());

}

protected void keyPressed(int keyCode) {

midlet.getDisplay().setCurrent(midlet.get_mainForm());

}

}

Page 36: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 36

VideoControl elhelyezése Canvas-on II.

public void putCameratoCanvas(){

try{

player=Manager.createPlayer("capture://video");

player.realize();

videoControl=(VideoControl)(player.getControl("VideoControl"));

if (videoControl != null){

videoControl.initDisplayMode(VideoControl.USE_DIRECT_VIDEO,canvas);

videoControl.setDisplaySize(100,220);

videoControl.setDisplayLocation(30,40);

}

}

catch(MediaException me){ me.printStackTrace(); }

catch (IOException ex){ ex.printStackTrace(); }

try{

if(player!=null)

player.start();

if(videoControl!=null)

videoControl.setVisible(true);

}

catch(MediaException me){ me.printStackTrace(); }

catch(SecurityException se){ se.printStackTrace(); }

}

Page 37: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 37

VideoControl elhelyezése Canvas-on II.

Page 38: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 38

Tartalom

Bevezetés

Multimédia szolgáltatások mobil eszközökön

Multimédia API ismertetése

Az API működése

Kamerakezelés Java ME platformon

A kamera képének megjelenítése

Kép beolvasása kameráról

Hangok felvétele és lejátszása Java ME platformon

Hangfelvételi lehetőségek

Hanglejátszás mobil eszközökön

Összefoglalás

Teszt

Page 39: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 39

Fotó készítése

byte[] getSnapshot(String imageType)

Az imageType paraméterekben adhatók meg a

beolvasás paraméterei

Összetett string paraméter

A készülékek Java implementációi eltérő

beállításokat támogatnak

Kép beolvasása default beállításokkal:

byte[] pngImageData =

videoControl.getSnapshot(null);

Page 40: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 40

További beállítások

BMP kép, alapértelmezett méret:

videoControl.getSnapshot("encoding=bmp");

Alapértelmezett kódolás, megadott méret:

videoControl.getSnapshot("width=80&height=

60");

JPEG kódolás, meghatározott méret:

videoControl.getSnapshot("encoding=jpeg&wi

dth=80&height=60");

Fontos:

MediaException keletkezik, ha a kért formátum nem támogatott

Page 41: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 41

Rögzített kép megjelenítése I.

A függvény visszatérési értéke a kép byte tömbben

Kép rögzítése külön szálban

Java ME alkalmazás számára a képet Image-ként tudjuk megjeleníteni:

byte[] snap =

videoControl.getSnapshot("encoding

=jpeg");

Image im = Image.createImage(snap,

0, snap.length);

Page 42: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 42

Rögzített kép megjelenítése II.

class MySnapShotTaker extends Thread

{

public void run()

{

try {

byte[] snap = videoControl.getSnapshot("encoding=jpeg");

if (snap != null){

Image im = Image.createImage(snap, 0, snap.length);

Alert al = new Alert("Snapshot","Here's the snap",im,AlertType.INFO);

al.setTimeout(2000);

getDisplay().setCurrent(al, mainForm);

}

}

catch (MediaException ex){

ex.printStackTrace();

}

}

}

Page 43: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 43

Rögzített kép megjelenítése III.

Kamera előnézet Beolvasott kép

Page 44: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 44

Tartalom

Bevezetés

Multimédia szolgáltatások mobil eszközökön

Multimédia API ismertetése

Az API működése

Kamerakezelés Java ME platformon

A kamera képének megjelenítése

Kép beolvasása kameráról

Hangok felvétele és lejátszása Java ME platformon

Hangfelvételi lehetőségek

Hanglejátszás mobil eszközökön

Összefoglalás

Teszt

Page 45: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 45

Hangfelvétel mobiltelefonon

Beépített mikrofon

Hangfelvétel beállításai:

Felvétel hossza

Hol tároljuk a felvett hangot

Lehetőség a felvétel megszakítására

Felvétel kódolása

Stb.

Java ME platformon az MMAPI-n keresztül érhető el

Page 46: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 46

Hang felvétele Java ME platformon I.

javax.microedition.media.control.

RecordControl

Szükséges egy player objektum létrehozása:

Player player=Manager.createPlayer(

"capture://audio");

RecordControl létrehozása a player

segítségével:

RecordControl rc=

(RecordControl)player.getControl(

"RecordControl");

Page 47: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 47

Hang felvétele Java ME platformon II.

A felvétel helyének meghatározása Stream

esetén:

public void

setRecordStream(OutputStream stream)

Felvétel adott fájlba:

public void

setRecordLocation(java.lang.String loca

tor)

Pl.: „file:///root1/vrec.wav”

Amennyiben a file nem elérhető IOException

keletkezik

Page 48: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 48

Hang felvétele Java ME platformon III.

A felvétel hosszának meghatározása (byte-ban):

public int setRecordSizeLimit(int

size)

A visszatérési érték a ténylegesen beállításra került

limit

Felvétel indítása:

public void startRecord()

A függvény meghívása nem hívja meg a player

start() metódusát automatikusan, annak

meghívásáig a felvevő „standby” módba kerül

Page 49: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 49

Hang felvétele Java ME platformon IV.

Felvétel leállítása:

public void stopRecord()

A függvény hívása nem hívja meg automatikusan a player stop() metódusát

A player stop() metódusának meghívása

nem állítja le a felvételt, hanem a felvevőt „standby” módba állítja. A player

újraindítása a felvétel automatikus indításával

jár ebben az esetben

Page 50: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 50

Hang felvétele Java ME platformon V.

Felvétel befejezése:

public void commit()

A stopRecord() függvény automatikusan meghívódik

Felvétel alaphelyzetbe állítása:

public void reset()

A felvett adatot törli, a stopRecord()függvény automatikusan meghívódik

A függvény hívása commit után viszont nem módosítja a felvételt

Page 51: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 51

Példa hangfelvevő alkalmazás I.

class MyRecorder extends Thread

{

public void run()

{

try {

recordPlayer=Manager.createPlayer("capture://audio");

recordPlayer.realize();

recordPlayer.addPlayerListener(getThisMidlet());

recordControl = (RecordControl)recordPlayer.getControl("RecordControl");

recordControl.setRecordSizeLimit(10000);

recordOutput = new ByteArrayOutputStream();

recordControl.setRecordStream(recordOutput);

recordControl.startRecord();

recordPlayer.start();

} catch (MediaException ex) {

ex.printStackTrace();

} catch (IOException ex) {

ex.printStackTrace();

}

}

}

Page 52: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 52

Példa hangfelvevő alkalmazás II.

public void playerUpdate(Player player, String string, Object object)

{

if (player.equals(recordPlayer) && string.equals(RECORD_STOPPED))

{

try {

recordControl.commit();

recordPlayer.stop();

setSound(recordOutput.toByteArray());

get_helloStringItem().setLabel("Sound ready");

} catch (MediaException ex) {

ex.printStackTrace();

} catch (IOException ex) {

ex.printStackTrace();

}

}

}

Page 53: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 53

Példa hangfelvevő alkalmazás III.

Page 54: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 54

Tartalom

Bevezetés

Multimédia szolgáltatások mobil eszközökön

Multimédia API ismertetése

Az API működése

Kamerakezelés Java ME platformon

A kamera képének megjelenítése

Kép beolvasása kameráról

Hangok felvétele és lejátszása Java ME platformon

Hangfelvételi lehetőségek

Hanglejátszás mobil eszközökön

Összefoglalás

Teszt

Page 55: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 55

Egyszerű hangok lejátszása

Manager osztály statikus függvénye:

static void playTone(int note,

int duration, int volume)

Példa:try {

// hang lejátszása 4000 ms hosszan 100-as hangerővel

Manager.playTone()(ToneControl.C4, 4000, 100);

}

catch(MediaException me) { }

ToneControl vezérlő:

Hang szekvenciák lejátszása

Az osztály tartalmazza a szükséges konstansokat

Page 56: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 56

VolumeControl példa

javax.microedition.media.control.

VolumeControl

Hang némítási mód lekérdezése,

beállítása:

boolean isMuted()

void setMute(boolean mute)

Hangerő lekérdezése, beállítása (0-100):

int getLevel()

int setLevel(int level)

Page 57: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 57

Hanglejátszás hálózaton keresztül

try {

Player p=Manager.createPlayer

("http://server/somemusic.mp3");

p.setLoopCount(5); // ismétlődés

p.start();

}

catch(IOException ioe) {

}

catch(MediaException e) {

}

Page 58: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 58

Hanglejátszás erőforrásból

try {

InputStream is =

getClass().getResourceAsStream(

"audio.wav");

Player player = Manager.createPlayer(is,

"audio/X-wav");

p.start();

}

catch(IOException ioe) {

}

catch(MediaException me) {

}

Page 59: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 59

MP3 lejátszás fájlból

FájlConnection megnyitása:

FileConnection mp3File =

(FileConnection)

Connector.open("file:///"+aMP3Path,

Connector.READ);

InputStream megnyitása:

InputStream mp3FileInputStream =

mp3File.openInputStream();

Player létrehozása:

Player mp3Player =

Manager.createPlayer(mp3FileInputStream

,"audio/mp3");

Page 60: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 60

Egyszerű mp3 lejátszó készítése I.

Szükséges változók:

private Player mp3Player;

private VolumeControl volumeControl;

private FileConnection mp3File;

private InputStream mp3FileInputStream;

Függvények:

Lejátszás indítása adott fájlra: public void playMP3(String aMP3Path)

Lejátszás megállítása: public void stopMp3Player()

Értesítések kezelése (PlayerListener interface implementálása: public void playerUpdate(Player player, String

string, Object object)

Hangerőszabályzó függvények

Page 61: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 61

Egyszerű mp3 lejátszó készítése II.

public void playMP3(String aMP3Path){

try{

mp3File = (FileConnection) Connector.open("file:///"+aMP3Path,Connector.READ);

mp3FileInputStream = mp3File.openInputStream();

mp3Player = Manager.createPlayer(mp3FileInputStream,"audio/mp3");

mp3Player.addPlayerListener(this);

mp3Player.realize();

volumeControl=(VolumeControl)(mp3Player.getControl("VolumeControl"));

volumeControl.setLevel(get_gaugeVolume().getValue());

}

catch(MediaException me){me.printStackTrace();}

catch (IOException ex){ex.printStackTrace();}

try{

if(mp3Player!=null){

mp3Player.prefetch();

mp3Player.start();

}

}

catch(MediaException me){me.printStackTrace();}

catch(SecurityException se){se.printStackTrace();}

}

Page 62: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 62

Egyszerű mp3 lejátszó készítése III.

public void stopPlayer()

{

try {

if (mp3Player!=null)

mp3Player.close();

if (mp3FileInputStream!=null)

mp3FileInputStream.close();

if (mp3File!=null)

mp3File.close();

} catch (Exception ex) {

ex.printStackTrace();

}

}

Page 63: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 63

Egyszerű mp3 lejátszó készítése IV.

public void playerUpdate(Player player, String string, Object object) {

if (player.equals(mp3Player))

{

if (string.equals(STARTED))

get_stringItemPlayerStatus().setText("started");

else if (string.equals(STOPPED))

get_stringItemPlayerStatus().setText("stopped");

else if (string.equals(END_OF_MEDIA))

{

stopPlayer();

get_stringItemPlayerStatus().setText("end of media");

}

}

}

Page 64: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 64

Egyszerű mp3 lejátszó készítése V.

public void increaseVolume()

{

if (get_gaugeVolume().getValue()<get_gaugeVolume().getMaxValue())

{

get_gaugeVolume().setValue(get_gaugeVolume().getValue()+10);

setVolumeFromUI();

}

}

public void decreaseVolume()

{

if (get_gaugeVolume().getValue()>0)

{

get_gaugeVolume().setValue(get_gaugeVolume().getValue()-10);

setVolumeFromUI();

}

}

public void setVolumeFromUI()

{

if (volumeControl!=null && mp3Player!=null && mp3Player.getState()==Player.STARTED)

volumeControl.setLevel(get_gaugeVolume().getValue());

}

Page 65: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 65

Az elkészült mp3 lejátszó

Page 66: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 66

Tartalom

Bevezetés

Multimédia szolgáltatások mobil eszközökön

Multimédia API ismertetése

Az API működése

Kamerakezelés Java ME platformon

A kamera képének megjelenítése

Kép beolvasása kameráról

Hangok felvétele és lejátszása Java ME platformon

Hangfelvételi lehetőségek

Hanglejátszás mobil eszközökön

Összefoglalás

Teszt

Page 67: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 67

Összefoglalás

Multimédia funkciók elérése Java ME platformon az MMAPI-n keresztül (JSR-135)

Az emulátor is támogatja bizonyos mértékben az MMAPI-t

Ügyelni kell a memóriahasználat mértékére

Kamera, videó és hang anyagok kezelése

Legfontosabb osztályok:

Manager

Player

Control osztályok

Page 68: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 68

Tartalom

Bevezetés

Multimédia szolgáltatások mobil eszközökön

Multimédia API ismertetése

Az API működése

Kamerakezelés Java ME platformon

A kamera képének megjelenítése

Kép beolvasása kameráról

Hangok felvétele és lejátszása Java ME platformon

Hangfelvételi lehetőségek

Hanglejátszás mobil eszközökön

Összefoglalás

Teszt

Page 69: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 69

Teszt

1. Mire használható a Manager osztály? Főbb jellemzői?

2. Melyik JSR támogatja a multimédia kezelést Java ME platformon?

3. Hol jeleníthető meg a kamera képe (milyen felületeken)?

4. Melyik vezérlő használható hangerőszabályozásra?

5. Mire szolgál a prefetch() függvény?

Page 70: 11 J2ME Multimedia v1

© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 70

Kérdések