Java Mobile Media API - Java Mobile Media API
The Mobile Media API (MMAPI) je API specifikace pro Java ME plošina CDC a CLDC zařízení jako mobilní telefony. V závislosti na tom, jak je implementována, umožňují rozhraní API aplikacím přehrávat a zaznamenávat zvuky a videa a pořizovat statické obrázky. MMAPI byl vyvinut pod Proces komunity Java jako JSR 135.
Programovací koncepty
Multimedia Java API je založeno na čtyřech hlavních typech tříd v javax.microedition.media
balík —The Manažer
, Hráč
, PlayerListener
a různé typy Řízení
.
Programátoři Java ME, kteří chtějí použít JSR 135, by nejprve využili statické metody systému Manažer
třída. I když existují i jiné metody, jako je playTone
, hlavní použitá metoda je createPlayer
. To trvá buď a URI nebo InputStream
a Typ MIME. Ve většině případů se používají URI. Mezi běžné používané protokoly URI patří:
- soubor:
- zdroj: (který může extrahovat soubor z JAR MIDletu, ale je závislý na implementaci)
- http:
- rtsp:
- snímání: (používá se pro záznam zvuku nebo videa)
Typ MIME je volitelný a je odvozen z předaných dat, pokud nejsou zadány.
The createPlayer
metoda vrací implementaci Hráč
rozhraní (i když používáte a zachytit: URI protokolu). To má základní metody, které jsou použitelné pro všechny hráče, jako je spouštění a zastavování média a požadování smyčky. Můžete také setPlayerListener
k objektu implementujícímu PlayerListener
rozhraní, které bude přijímat různé události související s klipem (spuštění, zastavení, dokončení médií atd.)
Hráč
třídy mají také a getControl
metoda, která vrací implementaci konkrétního Řízení
. A Řízení
zpracovává libovolná volitelná rozhraní API, která nejsou použitelná pro všechny typy médií. Jakékoli Hráč
může nebo nemusí být schopen poskytnout implementaci jakéhokoli daného Řízení
.
(Typicky Řízení
vrácený je ve skutečnosti Hráč
sám o sobě, ale není zaručeno, že tomu tak bude.)
Sada ovládacích prvků implementovaných a Hráč
není omezen; některé standardní jsou však definovány v javax.microedition.media.control
balíček JSR:
Ovládací rozhraní | Popis |
---|---|
FramePositioningControl | Ovládací prvek pro video data, který umožňuje přístup k jednotlivým snímkům. |
GUIControl | Ovládací prvek pro data, která vyžadují zobrazení, například video. |
MetaDataControl | Používá se k určení informací o metadatech uložených v amedia streamu, jako je název, autorská práva, autor atd. |
MIDIControl | Plně funkční ovládání, které umožňuje přístup k MIDI přehrávači zařízení. |
PitchControl | Slouží k ovládání výšky (frekvence) zvukových dat. |
RateControl | Slouží k ovládání rychlosti přehrávání přehrávače. |
RecordControl | Umožňuje ovládat záznam dat ze zařízení pro snímání, například videa z fotoaparátu nebo zvuku ze zvukového záznamníku. |
StopTimeControl | Ovládací prvek, který umožňuje nastavit přednastavený čas, kdy chcete, aby přehrávač přestal hrát. |
TempoControl | Podobně jako RateControl, tento ovládací prvek umožňuje změnit tempo (rychlost) přehrávání audio přehrávače, obvykle MIDI přehrávače. |
ToneControl | Plně funkční ovládání, které vám umožní hrát monotónní tónové sekvence. |
VideoControl | Rozšiřuje GUIControl a řídí zobrazení videa. |
Ovládání hlasitosti | Nejjednodušší ovládací prvek, který umožňuje ovládat hlasitost zvuku v a Hráč . |
(Další mohou být definovány v JSR 234 (Pokročilé multimediální doplňky ).
Podmnožina JSR 135 je definována v JSR 118 (MIDP 2.0).
Životní cyklus hráče
Bez ohledu na použitý protokol nebo typ média Hráč
se během svého životního cyklu pohybuje stejnými diskrétními stavy. Tyto stavy jsou uvedeny v tabulce níže
Stát | Popis |
---|---|
Nerealizované | Počáteční stav při vytvoření přehrávače. V tomto stavu nemá hráč dostatek informací k získání zdrojů potřebných ke zpracování média. |
Uvědomil | Jakmile hráč získá informace potřebné k získání prostředků, přesune se do realizovaného stavu. V tomto stavu je pravděpodobné, že většina zdrojů již byla získána, aby fungovala. Některé prostředky však v tomto okamžiku možná nebyly získány, zvláště pokud jsou zahrnuty systémové závislosti, například u ovladače zvuku nebo videa, kde je třeba získat výhradní přístup. |
Předem načteno | Jakmile hráč získá všechny zdroje, včetně omezených a na systému závislých zdrojů, hráč se přesune do Prefetched stavu. Jakmile je hráč ve stavu Předem načteno, má vše potřebné k plnění svých úkolů. |
Začal | Přehrávač ve spuštěném stavu označuje, že se zpracovává obsah přidružený k přehrávači. |
Zavřeno | Hráč se na konci svého životního cyklu přesune do stavu Uzavřeno. Hráč v uzavřeném stavu nesmí být znovu použit. |
Implementace
Stejně jako u většiny specifikací Java ME se implementace liší i přes nejlepší snahu autorů specifikací zajistit konzistenci. Dvě zjevné oblasti pro rozdíly jsou v podporovaných ovládacích prvcích a v přijatelných typech URI na prvním místě. Temnější oblasti jsou, zda míchání je podporován; mnoho her by chtělo hrát MIDI hudební stopu a vrstvu PCM zvukové efekty nahoře.
Dalším zdrojem extrémních odchylek je výkon. Například pokud HTTP klip je požadován, kdy se klip stáhne? Specifikace to rozpoznává poskytnutím dvou Hráč
metody, které lze vyvolat před samotným hraním: realizovat
a prefetch
. V závislosti na implementaci mohou tito dělat část práce s uvedením klipu do hratelného stavu, což zrychlí skutečné přehrávání klipu, když je to potřeba. Některé implementace jsou natolik sofistikované, že při přehrávání skutečně streamují klip na vyžádání.
Symbian OS obsahuje velmi úplnou implementaci JSR 135, ale i to je velmi závislé na základních multimediálních schopnostech zařízení a někteří výrobci zařízení se mohou rozhodnout, že nevystaví temnější části prostředí Java ME, jako je nahrávání.
Konzistence implementace je zajištěna vynucením všech implementací předat Javu Sada pro technologickou kompatibilitu (TCK). Tím je zajištěno, že je testováno každé podporované schéma URI, typ MIME a Control, ale netestuje se každá permutace těchto volitelných částí.
Příklad kódu
balík org.wikipedia;import javax.microedition.midlet. *;import javax.microedition.media. *;veřejnost třída SimplePlayer rozšiřuje MIDlet { chráněný prázdnota destruApp(booleovský arg0) hodí MIDletStateChangeException {} chráněný prázdnota pauseApp() {} chráněný prázdnota startApp() hodí MIDletStateChangeException { Snaž se { Tětiva url = „http://upload.wikimedia.org/wikipedia/commons/a/a0/Bass_sample.mid“; Hráč hráč = Manažer.createPlayer(url); hráč.Start(); } chytit (Výjimka E) { E.printStackTrace(); } }}
Viz také
Bibliografie
- Goyal, Vikram (1. května 2006). Pro Java ME MMAPI: Mobile Media API for Java Micro Edition (1. vyd.). Apress. str. 250. ISBN 1-59059-639-0.