11 j2me multimedia v1
TRANSCRIPT
© 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
© 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?
© 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
© 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)
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 12
Multimédia Feldolgozás I.
© 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
© 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)
© 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
© 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)
© 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");
}
}
}
© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 18
Player életciklus
javax.microedition.media.Player
© 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
© 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
© 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
© 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
© 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)
© 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)
© 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
© 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
© 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"));
© 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());
}
}
}
© 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
© 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
© 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
© 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"));
© 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
© 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();
© 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());
}
}
© 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(); }
}
© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 37
VideoControl elhelyezése Canvas-on II.
© 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
© 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);
© 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
© 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);
© 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();
}
}
}
© 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
© 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
© 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
© 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");
© 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
© 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
© 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
© 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
© 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();
}
}
}
© 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();
}
}
}
© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 53
Példa hangfelvevő alkalmazás III.
© 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
© 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
© 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)
© 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) {
}
© 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) {
}
© 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");
© 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
© 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();}
}
© 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();
}
}
© 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");
}
}
}
© 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());
}
© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 65
Az elkészült mp3 lejátszó
© 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
© 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
© 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
© 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?
© BME-AAIT 2010 Multimédia szolgáltatások Java ME platformon 70
Kérdések