Mobile Media API

Mobile Media API (MMAPI, JSR-135) - et sæt klasser til J2ME , der giver dig mulighed for at afspille lyd og video; del af MIDP 2.0.

Udnævnelse

Understøttede formater

MIDP 2.0 kræver, at telefonen afspiller tone og WAV - lyde . Afspilning af andre formater ( MIDI , MP3 , AMR , 3GP , MPEG -4, MMF , iMelody ) er valgfrit. MIDI afspilles dog de facto på alle telefoner.

Essential Classes

MMAPI klasserne er i javax.microedition.media.

Manager- klassen bruges til at skabe spillere. Alle spillere har en spillergrænseflade . MMAPI inkluderer også andre klasser og grænseflader, der bruges til at styre volumen, reagere på hændelser osv.

Fem spillerstater

Spilleren har fem tilstande:

Manager.createPlayer()Den afspiller, der lige er oprettet af funktionen, er i tilstanden UNREALIZED.

Funktionen realize()downloader alle de ressourcer, der er nødvendige for afspilning, med undtagelse af "værdifuld og knap" (især læser den en fil eller kommunikerer med serveren ). Spilleren overføres fra stat UNREALIZEDtil stat REALIZED. Funktionsopkaldet realize()kan tage noget tid.

Funktionen prefetch()indlæser "værdifulde og knappe ressourcer"; spilleren flytter fra staten UNREALIZEDeller REALIZEDtil staten PREFETCHED. Funktionsopkaldet kan prefetch()også tage noget tid. I de fleste MMAPI-implementeringer kan PREFETCHEDkun én spiller være i en tilstand.

Funktionen start()starter afspilning ved at skifte afspilleren fra tilstandene UNREALIZEDeller REALIZEDtil PREFETCHEDtilstanden STARTED. Hvis spilleren var i staten PREFETCHED, er funktionen start()garanteret at blive kaldt med det samme. Hvis afspilleren spoles tilbage til slutningen, starter funktionen start()afspilning fra begyndelsen.

Funktionen close()kaldes, når afspilleren ikke længere er nødvendig. Spilleren går ind i staten CLOSED, og i denne tilstand kan den blive ødelagt af skraldesamleren .

For at stoppe afspilleren kaldes funktionen stop(). Samtidig går den fra stat STARTEDtil stat PREFETCHED(og spole ikke tilbage nogen steder).

Funktionen kaldes for at frigive knappe ressourcer deallocate(). Samtidig går det fra staten STARTEDeller PREFETCHEDtil staten REALIZED.

Funktionen deallocate()har en anden vigtig rolle. Hvis overgangen af ​​afspilleren til tilstanden REALIZEDikke er fuldført (det vil sige, at filen ikke er blevet downloadet til slutningen), afbrydes filindlæsningen, og afspilleren forbliver i UNREALIZED.

Der UNREALIZEDer ingen vej i staten.

Interface kontrol

Den tomme grænseflade Controltjener som grundlag for at konstruere forskellige afspilningskontrolgrænseflader. Flere efterkommere Controler defineret i pakken javax.microedition.media.control: ToneControl, VolumeControl, MIDIControlosv.

Det enkleste kodeeksempel

import javax.microedition.media.* ; Spiller p = Manager . createPlayer ( "http://www.fishy.com/my.mp3" , "audio/mp3" ); p . start ();

Telefoner, der understøtter MMAPI

MMAPI er en del af MIDP 2.0. Det vil sige, at enhver telefon, der understøtter MIDP 2.0, skal understøtte MMAPI. Her er en (ikke-udtømmende) liste over MIDP 1.0-telefoner, der understøtter MMAPI.

Nokia

Sony Ericsson

  • Alle modeller med J2ME-understøttelse.

Siemens

  • Alle modeller med en 101x80 skærm ( M55 , S55 , osv.) har deres eget sæt af klasser til afspilning af multimedier, svarende til MMAPI.

Problemer

MMAPI er designet til at afspille lyd, video osv. i multimedieapplikationer . For eksempel på Motorola E398 - telefonen er den indbyggede lydafspiller skrevet i Java ved hjælp af MMAPI. MMAPI er dog ikke velegnet til at implementere lydeffekter i mobilspil , da hver telefon har sine egne finesser. Nogle giver dig mulighed for at beholde alle lyde samtidigt i tilstanden PREFETCHEDog afspille dem til enhver tid; i andre er det nødvendigt at ty til forskellige tricks. Der er også mindre tydelige finesser. Det sker, at der skal gå noget tid mellem at stoppe og afspille afspilleren, på nogle på ingen måde forældede modeller er denne tid 1-2 s!

Nogle "finesser" er faktisk direkte overtrædelser af standarden.

De mest almindelige overtrædelser af standarden

Som standard, hvis afspilleren er i tilstanden UNREALIZED, vil kommandoen start()først ændre den til REALIZED, derefter til PREFETCHED, så til STARTED. Nogle telefoner tillader ikke sådan "hopping"; det kræves eksplicit at indstille realize(), prefetch(), start().

Nogle telefoner indlæser filer senere, hvilket også er imod standarden. Antag, at afspilleren er blevet oprettet og flyttet til staten PREFETCHED. Ifølge standarden skal kommandoen start()kaldes øjeblikkeligt. Men nogle MMAPI-implementeringer indlæses kun på kommando start()(og kun gentagne start()dem kaldes faktisk øjeblikkeligt).

Ifølge standarden, hvis afspilningen er slut, skal start()afspilleren efter en anden kommando begynde at spille igen. På nogle telefoner spiller en sådan afspiller ikke noget, før den eksplicit spoles tilbage med setMediaTime(0).

Afventer MIDP 3.0

Det antages, at den endnu ikke frigivne MIDP 3.0 vil løse denne inkonsistens ved at skærpe kravene til implementering af MMAPI.

Se også

Links