Programiranje

Napredek na API-jih JMF in Java Media

Moj prvi JavaWorld članek pot nazaj, ko je bil v Java Media Framework (JMF). Ker so različni API-ji za medije dozoreli, menim, da so se stvari zaokrožile. Zato bom posvetil svojemu finalu Programiranje medijev stolpec na ponovni obisk JMF in splošno stanje vseh API-jev Java Media.

Prišlo je do opaznih sprememb v JMF in drugih tehnologijah Java Media, podjetjih, ki razvijajo njihove izvedbe, in njihovi razpoložljivosti za razvijalce. Ta članek po potrebi posodablja gradivo iz prejšnjih člankov.

Pomemben opomnik: Java Media Framework je poseben API za sinhronizacijo večpredstavnostnih tokov (datotek, omrežnih tokov itd.). Je eden izmed več Java Media API-jev, ki vključujejo tudi Java 2D, Java 3D, Java Speech itd. Java Media Framework označujem kot JMF, pridržuje izraz Java Media za celotno zbirko multimedijskih API-jev.

Zgodovina in osnove JMF

Od JMF 1.0, aka Java Media Player API, sem aprila 1997 napisal naslednje (glej Vire):

API Java Media Player, del Java Media Framework (JMF), omogoča programerjem Java, da zlahka vdelajo zvok in video v programčke in programe. Statična in pretočna večpredstavnost sta podprta s katerega koli veljavnega URL-ja. Predvajalnike JMF lahko nadzorujejo drugi predvajalniki, kar omogoča sinhrono predvajanje več avdio in video vzorcev.

Te informacije še vedno veljajo za posodobitve in dopolnitve v zadnjih dveh letih. JMF pa je razvil nove zmogljivosti in se razširil, zlasti s prihajajočo izdajo 2.0 API (pričakovano v drugi polovici leta 1999).

Igralci JMF industrije

Najprej si oglejmo igralce v industriji. Sun, Silicon Graphics (SGI) in Intel so sredi leta 1998 zasnovali in določili originalni JMF 1.0. Vmes od začetne različice API-ja sta se SGI in Intel umaknila iz postopka specifikacije JMF. Nekaj ​​časa je bila v skupnosti uporabnikov JMF velika zaskrbljenost, da je Sun edini prodajalec, ki podpira JMF. Ta položaj je bil nezaželen.

Na srečo je konec leta 1998 z zanimanjem za JMF stopil IBM. Kmalu po tem, ko se je IBM pridružil podjetju Sun, je bila sproščena izvedba 1.0 API za celotno Java (decembra 1998). Ta izvedba, znana kot JMF 1.1 za platforme Java, podpira omejeno, a pomembno podmnožico vrst vsebin in protokolov, ki jih podpirata implementaciji Win32 in Solaris-native JMF 1.1 (znana kot izvedbeni paketi). Razpoložljivost celotnega Java JMF 1.1 je bila pomemben mejnik za JMF, saj je tehnologija postala na voljo za kateri koli Java 1.1 skladen ali izvajalni čas Java 2. Dejansko je izvedba JMF 1.1 Java na voljo celo v spletni usmerjeni različici z orodji, ki razvijalcem omogočajo, da v datoteko JAR vključijo samo ustrezne razrede JMF za prenos s svojimi programčki JMF. To omogoča razmestitev programčkov, ki temeljijo na JMF, na spletnem strežniku za uporabo v katerem koli brskalniku, ki je združljiv z Java 1.1. Netscape in Microsoft podpirata Javo 1.1 - in s tem tudi JMF 1.1 za Javo - v nedavnih izdajah Navigatorja in Internet Explorerja v brskalniku.

IBM pomaga Sunu pri kodiranju API-ja JMF 2.0, ki bo vseboval specifikacijo in zagotovil referenčno izvedbo naslednjega API-ja JMF: Java Media Capture. Upajmo, da bo IBM ugotovil, kako bo funkcionalnost JMF pozneje uvedel v nekatere svoje programsko usmerjene izdelke, ki temeljijo na Javi - kar je potencialno dobro za dolgo življenjsko dobo tehnologije JMF.

Kaj je novega v JMF 2.0 v primerjavi z 1.0?

API JMF 1.0 določa komponente, potrebne za predvajanje sinhroniziranega zvoka in videa. Preglejte moj prejšnji članek JMF (glejte Vire) za pregled zmogljivosti JMF 1.0.

JMF 2.0 specifikaciji doda nekaj ključnih dodatkov:

  • Zajem zvoka in videa
  • Pretakanje zvoka in videa ter s tem možnost gradnje strežnikov za pretakanje celotne Jave poleg odjemalcev
  • Vstavljiva podpora kodeku znotraj igralcev

Za več informacij o JMF 2.0 in njegovih novih zmožnostih glejte Vodnik programerja Java Media Framework (glej Vire), trenutno na voljo v različici 0.5 za zgodnji dostop.

Namestitev razvojnih orodij JMF in izvajanje

Tako Silicon Graphics kot Intel sta s svojih spletnih mest odstranila prejšnje različice JMF. Lahko pa prenesete najnovejše referenčne izvedbe (označeno z JMF 1.1, skladno s specifikacijami 1.0 API) za platforme Win32, Solaris in Java s spletnega mesta Sun (glejte Viri).

Upoštevajte, da dokumentacija za različico za celotno Java izrecno omenja AIX, kar pomeni, da je IBM to programsko opremo preizkušal v svojem delu AIX Java. Pričakujem, da bodo prihodnje izdaje JMF (2.0 in novejše različice) posebej podpirale IBM-ova operacijska okolja, bodisi s čisto Java implementacijo bodisi z izvornimi implementacijami, specifičnimi za OS.

Posodobljeni primeri JMF

Primer JMF 1.0, skladen z beta, iz prejšnjega članka o JMF sem posodobil tako, da se izvaja v okoljih, skladnih z API-ji JMF 1.0. Primer kode lahko prenesete in jo preizkusite v izvedbah JMF 1.1 z uporabo lastnih predstavnostnih datotek. Applet se mora zagnati tudi v času izvajanja JMF 2.0, ko postanejo na voljo. (Če želite prenesti vse datoteke, povezane s tem člankom, v obliki zip, glejte Viri.)

001 // Komentirajte naslednji stavek paketa, da ga boste sestavili ločeno. 002 // paket com.javaworld.media.jmf; 003 004 uvoz java.applet. *; 005 uvoz java.awt. *; 006 uvoz java.net. *; 007 uvoz java.io. *; 008 uvoz javax.media. *; 009 010 / ** 011 * JMF11Applet posodablja JMFApplet iz aprila 1997 012 * članek JavaWorld za skladnost z API-ji JMF 1.1. Prosimo, 013 * glejte članek na:

014 * //www.javaworld.com/jw-04-1997/jw-04-jmf.html 015 *

016 * Poleg tega je bil JMF11Applet preoblikovan v 017 * z uporabo modela dogodkov Java 1.1 (in novejših). Ta različica 018 * je bila razvita in preizkušena na Javi 2 019 * in JMF 1.1 za celotno Java, maj 1999. 020 *

021 * Ta programček je mogoče namestiti v javne spletne strežnike 022 * z uporabo jmf-server.jar, ki je naveden v JMF 1.1 023 * za prenos spletnih strežnikov. Ta arhiv JAR vsebuje 024 * potrebne razrede izvajalnega okolja JMF za vse Jave. JMF11Applet 025 * je bil uporabljen na ta način za stolpec junija 1999 026 *:

027 * //www.javaworld.com/jw-06-1999/jw-06-media.html 028 * 029 * @author Bill Day 030 * @version 1.1 031 * @see javax.media.ControllerEvent 032 * @see javax .media.ControllerListener 033 * @see javax.media.Manager 034 * @see javax.media.NoPlayerException 035 * @see javax.media.Player 036 * @see javax.media.RealizeCompleteEvent 037 ** / 038 039 javni razred JMF11Applet se širi Applet izvaja ControllerListener {040 zasebni URL myURL = null; 041 zasebni predvajalnik myPlayer = null; 042 private Component myVisual = null; 043 private Component myControls = null; 044 zasebna plošča visualPanel = null; 045 046 / ** 047 * Inicializirajte JMF11Applet. Postavimo vmesnik in 048 * ustvarimo predvajalnik v init (). 049 ** / 050 javna void init () {051 super.init (); 052 053 // Določite AWT Layout Manager. 054 setLayout (novo BorderLayout ()); 055 056 // Naloži URL s spletne strani JMF11Applet je vdelan. 057 String sredstvo = getParameter ("ASSET"); 058 059 // Preverite URL in ustvarite objekt URL, ki ga zadrži. 060 if (asset.equals ("")) {061 // sredstva nismo vnesli v programček. 062} else {063 poskusite {064 myURL = nov URL (getDocumentBase (), sredstvo); 065} catch (MalformedURLException e) {066 // Vnesli smo nepopolno sredstvo ali zgradili napačen URL. 067 // Močnejši programček bi moral s tem ravnati elegantno. 068} 069} 070 poskusite {071 // Tukaj je zanimiv košček. Upravitelj se uporablja za 072 // ustvari dejanski predvajalnik za ta URL. Nato 073 // dodamo JMF11Applet kot ControllerListener za myPlayer. 074 // To nam omogoča, da se odzovemo na RealizeCompleteEvents. 075 myPlayer = Manager.createPlayer (myURL); 076 myPlayer.addControllerListener (to); 077} catch (IOException e) {078 // Naleteli smo na težavo z V / I; izhod. 079 System.out.println ("V / I težava pri poskusu ustvarjanja predvajalnika ... izhod"); 080 System.exit (1); 081} catch (NoPlayerException e) {082 // Uporabnega igralca ni mogoče vrniti; izhod. 083 System.out.println ("Noben uporaben predvajalnik ni vrnjen ... zapuščen"); 084 System.exit (1); 085} 086} 087 088 / ** 089 * Preglasite privzeti način zagona programčka, da pokličete Player 090 * realizirate (). To bo najprej izvedlo realizacijo, ki nato 091 * sproži končne bite gradnje grafičnega uporabniškega vmesnika v metodi controUpdate () 092 *. Predvajanja ne začnemo samodejno: uporabnik potrebuje 093 *, da klikne gumb »predvajaj« v našem programčku, da začne predvajati medijski vzorec 094 *. 095 ** / 096 javni void start () {097 myPlayer.realize (); 098} 099 100 101 / ** 102 * Preglasite privzeto metodo zaustavitve programčka, da pokličete myPlayer.stop () 103 * in myPlayer.deallocate (), tako da bomo pravilno sprostili vire 104 *, če nekdo zapre to stran v svojem brskalniku. 105 ** / 106 javni void stop () {107 myPlayer.stop (); 108 myPlayer.deallocate (); 109} 110 111 / ** 112 * Ker moramo vedeti, kdaj se realizacija zaključi, za obdelavo RealizeCompleteEvents uporabljamo 113 * controllerUpdate (). 114 * Ko prejmemo RealizeCompleteEvent, postavimo 115 * in prikažemo video komponento in kontrolnike v našem grafičnem uporabniškem vmesniku z apleti 116 *. 117 ** / 118 javna void controllerUpdate (ControllerEvent event) {119 if (primerek dogodka RealizeCompleteEvent) {120 //System.out.println("Received RCE ... "); 121 // Zdaj, ko imamo realiziran predvajalnik, lahko dobimo 122 // VisualComponent in ControlPanelComponent in jih 123 // zapakiramo v naš programček. 124 myVisual = myPlayer.getVisualComponent (); 125 if (myVisual! = Null) {126 // Da bi zagotovil, da BorderLayout ne bo spremenil velikosti VisualComponenta 127 //, ga z gnezdom FlowLayout vstavim 128 // v visualPanel. 129 visualPanel = nova plošča (); 130 visualPanel.setLayout (novo FlowLayout ()); 131 visualPanel.add (myVisual); 132 dodaj (visualPanel, BorderLayout.CENTER); 133 //System.out.println("Added VisualComponent ... "); 134} 135 myControls = myPlayer.getControlPanelComponent (); 136 if (myControls! = Null) {137 add (myControls, BorderLayout.SOUTH); 138 //System.out.println("Added controls ... "); 139} 140 // razveljavi (); 141 potrdi (); 142} 143 // V nasprotnem primeru dogodek preprosto zaužijemo. 144} 145}

Vključil sem preprost primer dokumenta HTML, example.html (ki ga lahko zdaj poskusite v svojem brskalniku, tako da kliknete tukaj), da vam pokažem, kako vdelati programček v svoje spletne strani. Preprosto spremenite predstavnostno datoteko v SREDSTVO tag in off greš!

V tem primeru sem za omogočanje prenosa JMF 1.1 za spletne strežnike (dokumentirano na spletnem mestu JMF) JMF11Applet za samodejni prenos jmf-server.jar, arhiv kod, ki vsebuje potrebne izvajalne razrede JMF. To omogoča, da se programček izvaja v katerem koli brskalniku, združljivem z Javo 1.1, brez končne programske opreme, ki bi jo končni uporabnik lahko namestil. (Upoštevajte, da različica JMF za spletne strežnike vključuje tudi orodje za prilagajanje, JMFCustomizer, ki vam bo potencialno omogočil, da iz datoteke JAR JMF odstranite še več nepotrebnih razredov. To orodje trenutno ne deluje pod Javo 2, ker uporablja zastarelo ime paketa za Swing.)

V posebnem primeru, vdelanem v example.html, naložimo datoteko WAV (welcome.wav), ugotovimo ustrezne nadzorne komponente, ki bodo na voljo (brez video komponente, ker je to samo zvočna predstavnostna datoteka), in predvajamo večpredstavnostno datoteko. Upoštevajte, da bo za prenos datotek WAV (600 KB) in razredov JMF (570 KB) morda potrebno nekaj minut za prenos v vašo napravo, odvisno od hitrosti povezave.

Po razčlenjevanju zgledne strani naj brskalniki, združljivi z Java 1.1, samodejno naložijo programček in podpirajo razrede JMF iz JavaWorld Spletni strežnik. Ko se programček naloži in zažene, lahko pritisnete gumb Predvajaj, da začnete predvajanje zvočne datoteke WAV. Poskusite prestaviti predvajanje s pomočjo drsnika in zaustavite in znova zaženite predvajanje z gumbom Pause / Play.

Izvedba platforme JMF 1.1 Java za svoje kontrolnike uporablja pripomočke v celoti Java, zato imajo kontrolniki enak videz od brskalnika do brskalnika in od platforme do platforme. Opazite, kako programček deluje v JVM Netscape Communicatorja na Solarisu 7 in Microsoftovem JVM v Internet Explorerju na Win32.

Gumb je označen jaz ponuja informacije o predstavnostni datoteki, ki se predvaja v programu JMF. Kliknite to informacijsko povezavo, da dobite podrobnosti o datoteki WAV, ki se izvaja na tej spletni strani.

$config[zx-auto] not found$config[zx-overlay] not found