Programovanie

Pokrok v oblasti JMF a Java Media API

Môj prvý JavaWorld článok spôsobom späť, keď bol v prostredí Java Media Framework (JMF). Keď rôzne mediálne API dozreli, mám pocit, že sa veci dostali do úplného kruhu. Preto budem venovať svoje finále Programovanie médií stĺpec k opätovnej návšteve JMF a všeobecnému stavu všetkých rozhraní Java Media API.

V prostredí JMF a ďalších technológiách Java Media, spoločnostiach vyvíjajúcich ich implementácie a ich dostupnosti pre vývojárov došlo k významným zmenám. Tento článok podľa potreby aktualizuje materiál z predchádzajúcich článkov.

Dôležitá pripomienka: Java Media Framework je špecifické rozhranie API na synchronizáciu multimediálnych prúdov (súbory, sieťové prúdy atď.). Je to jedno z niekoľkých Java Media API, ktoré zahŕňajú aj Java 2D, Java 3D, Java Speech atď. Java Media Framework označujem ako JMF, vyhradenie termínu Java Media pre celú zbierku multimediálnych API.

História a základy JMF

Z JMF 1.0, alias Java Media Player API, som v apríli 1997 napísal toto (pozri Zdroje):

Rozhranie Java Media Player API, ktoré je súčasťou Java Media Framework (JMF), umožňuje programátorom Javy ľahko vkladať audio a video do appletov a aplikácií. Statické aj streamované multimédiá sú podporované z akejkoľvek platnej adresy URL. Prehrávače JMF môžu byť ovládané inými prehrávačmi, čo umožňuje synchrónne prehrávanie viacerých zvukových a obrazových vzoriek.

Tieto informácie stále platia s aktualizáciami a doplnkami z posledných dvoch rokov. Spoločnosť JMF si však vyvinula nové schopnosti a rozšírila rozsah, najmä s pripravovaným vydaním 2.0 API (očakáva sa v druhej polovici roku 1999).

Hráči z odvetvia JMF

Najprv sa pozrime na priemyselných hráčov. Spoločnosti Sun, Silicon Graphics (SGI) a Intel navrhli a špecifikovali pôvodný JMF 1.0 v polovici roku 1998. Medzičasom od pôvodnej verzie API SGI aj Intel odstúpili z procesu špecifikácie JMF. V komunite používateľov JMF na chvíľu existovali značné obavy, že Sun bol jediným dodávateľom podporujúcim JMF. Táto situácia bola nežiaduca.

Našťastie koncom roku 1998 vstúpila spoločnosť IBM so záujmom o JMF. Krátko po vstupe IBM do spoločnosti Sun bola vydaná celojavská implementácia 1.0 API (december 1998). Táto implementácia, známa ako JMF 1.1 pre platformy Java, podporuje obmedzenú, ale významnú podmnožinu typov obsahu a protokolov podporovaných implementáciami JMF 1.1, ktoré sú natívne pre Win32 a Solaris (známe ako výkonnostné balíčky). Dostupnosť úplného JMF 1.1 pre Java bola hlavným míľnikom pre JMF v tom, že táto technológia bola dostupná pre akýkoľvek runtime kompatibilný s Java 1.1 alebo Java 2. V skutočnosti je implementácia JMF 1.1 Java k dispozícii dokonca aj vo webovo orientovanej verzii s nástrojmi, ktoré umožňujú vývojárom zahrnúť iba príslušné triedy JMF do súboru JAR na stiahnutie s ich appletmi JMF. Toto umožňuje nasadiť applety založené na JMF na webový server, aby ich mohol použiť akýkoľvek prehľadávač kompatibilný s Java 1.1. Netscape aj Microsoft podporujú vo svojich posledných vydaniach prehľadávačov Navigator a Internet Explorer verziu Java 1.1 - a teda JMF 1.1 pre jazyk Java.

IBM pomáha spoločnosti Sun pri definovaní API JMF 2.0, ktoré bude obsahovať špecifikáciu a poskytne referenčnú implementáciu ďalšieho API JMF: Java Media Capture. Dúfajme, že IBM príde na to, ako následne zaviesť funkcionalitu JMF do niektorých svojich obchodne orientovaných softvérových produktov založených na prostredí Java - čo je potenciálne dobrá vec pre životnosť technológie JMF.

Čo je nové v JMF 2.0 proti 1.0?

Rozhranie JMF 1.0 API špecifikuje komponenty potrebné na zvládnutie prehrávania synchronizovaného zvuku a videa. V mojom predchádzajúcom článku o JMF (pozri Zdroje) nájdete prehľad schopností JMF 1.0.

JMF 2.0 prináša niekoľko kľúčových dodatkov k špecifikácii:

  • Záznam zvuku a videa
  • Streamovanie zvuku a videa, a tým aj možnosť vybudovať okrem klientov aj streamovacie servery typu Java
  • Podpora zásuvných kodekov v prehrávačoch

Viac informácií o JMF 2.0 a jeho nových schopnostiach nájdete na serveri Príručka programátora Java Media Framework (pozri Zdroje), v súčasnosti k dispozícii vo verzii 0.5 skorý prístup.

Inštalácia vývojových nástrojov JMF a runtime

Silicon Graphics aj Intel odstránili predchádzajúce verzie JMF z príslušných webových stránok. Môžete si však stiahnuť najnovšie referenčné implementácie (označené JMF 1.1, vyhovujúce špecifikácii 1.0 API) pre platformy Win32, Solaris a Java zo stránky spoločnosti Sun (pozri Zdroje).

Pamätajte, že dokumentácia pre verziu všetkých jazykov Java sa konkrétne zmieňuje o systéme AIX, čo naznačuje, že spoločnosť IBM testovala tento softvér na svojom prostredí runtime AIX Java. Očakávam, že budúce vydania JMF (2.0 a novšie) budú špeciálne podporovať operačné prostredia IBM, či už prostredníctvom čistej implementácie Java alebo natívnych implementácií špecifických pre OS.

Aktualizované príklady JMF

Aktualizoval som príklad kompatibilný s JMF 1.0 beta z môjho predchádzajúceho článku o JMF, aby fungoval v prostrediach kompatibilných s JMF 1.0 API. Môžete si stiahnuť ukážkový kód a vyskúšať si ho v implementáciách JMF 1.1 pomocou svojich vlastných multimediálnych súborov. Keď bude applet k dispozícii, mal by bežať aj na jeho runtime JMF 2.0. (Ak chcete prevziať všetky súbory spojené s týmto článkom vo formáte zip, prečítajte si Zdroje.)

001 // Komentujte nasledujúci príkaz balíka, ktorý chcete zostaviť osobitne. 002 // balíček com.javaworld.media.jmf; 003 004 import java.applet. *; 005 import java.awt. *; 006 import java.net. *; 007 import java.io. *; 008 import javax.media. *; 009 010 / ** 011 * JMF11Applet aktualizuje JMFApplet z článku 012 * JavaWorld z apríla 1997 o zhode s JMF 1.1 API. 013 * nájdete v článku na adrese:

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

016 * Okrem toho bol prepracovaný JMF11Applet, aby 017 * používal model udalosti Java 1.1 (a ďalej). Táto verzia 018 * bola vyvinutá a testovaná na platforme Java 2 019 * a implementácii JMF 1.1 pre všetky Java, máj 1999. 020 *

021 * Tento applet môže byť nasadený na verejné webové servery 022 * pomocou súboru jmf-server.jar poskytnutého v JMF 1.1 023 * na stiahnutie webových serverov. Tento archív JAR obsahuje 024 * potrebných runtime tried JMF pre všetky Java. JMF11Applet 025 * bol nasadený týmto spôsobom pre stĺpec jún 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 verejná trieda JMF11Applet sa rozširuje Applet implementuje ControllerListener {040 súkromné ​​URL myURL = null; 041 private Player myPlayer = null; 042 private Component myVisual = null; 043 private Component myControls = null; 044 súkromný panel visualPanel = null; 045 046 / ** 047 * Inicializovať aplikáciu JMF11Applet. Rozložíme rozhranie a vytvoríme 048 * nášho hráča v init (). 049 ** / 050 public void init () {051 super.init (); 052 053 // Zadajte AWT Layout Manager. 054 setLayout (nový BorderLayout ()); 055 056 // Načítanie adresy URL z webovej stránky, do ktorej je vložený JMF11Applet. 057 String asset = getParameter ("ASSET"); 058 059 // Skontrolujte adresu URL a vytvorte objekt URL, ktorý ju bude obsahovať. 060 if (asset.equals ("")) {061 // do appletu sme nezadali žiadne dielo. 062} else {063 try {064 myURL = new URL (getDocumentBase (), asset); 065} catch (MalformedURLException e) {066 // Zadali sme neúplné dielo alebo vytvorili nesprávnu adresu URL. 067 // Robustnejší applet by to mal ladne riešiť. 068} 069} 070 vyskúšať {071 // Tu je zaujímavý kúsok. Správca sa používa na vytvorenie 072 // skutočného prehrávača pre túto adresu URL. Potom 073 // pridáme JMF11Applet ako ControllerListener pre myPlayer. 074 // Toto nám umožňuje odpovedať na RealizeCompleteEvents. 075 myPlayer = Manager.createPlayer (myURL); 076 myPlayer.addControllerListener (this); 077} catch (IOException e) {078 // Vyskytol sa problém s I / O; východ. 079 System.out.println ("Problém I / O pri pokuse o vytvorenie prehrávača ... ukončený"); 080 System.exit (1); 081} catch (NoPlayerException e) {082 // Nemožno vrátiť použiteľný prehrávač; východ. 083 System.out.println ("Žiadny použiteľný prehrávač sa nevrátil ... ukončuje sa"); 084 System.exit (1); 085} 086} 087 088 / ** 089 * Prepíše predvolenú metódu spustenia appletu, aby zavolala na hráčovo 090 * uvedomiť si (). Toto najskôr urobí realizáciu, ktorá následne 091 * spustí posledné bity budovania grafického používateľského rozhrania v metóde controllerUpdate () 092 *. Prehrávanie nespúšťame automaticky: Používateľ musí na spustenie prehrávania ukážky média 094 * kliknúť na tlačidlo „prehrať“ v našom applete. 095 ** / 096 public void start () {097 myPlayer.realize (); 098} 099 100 101 / ** 102 * Prepíše predvolenú metódu zastavenia appletu na volanie myPlayer.stop () 103 * a myPlayer.deallocate (), aby sme správne uvoľnili zdroje 104 *, ak niekto opustí túto stránku vo svojom prehliadači. 105 ** / 106 public void stop () {107 myPlayer.stop (); 108 myPlayer.deallocate (); 109} 110 111 / ** 112 * Pretože musíme vedieť, kedy je realizácia dokončená, na spracovanie RealizeCompleteEvents používame 113 * controllerUpdate (). 114 * Keď dostaneme RealizeCompleteEvent, rozložíme 115 * a zobrazíme video komponent a ovládacie prvky v našom 116 * applete GUI. 117 ** / 118 public void controllerUpdate (udalosť ControllerEvent) {119 if (udalosť instanceof RealizeCompleteEvent) {120 //System.out.println("Received RCE ... "); 121 // Teraz, keď máme realizovaný prehrávač, môžeme získať 122 // VisualComponent a ControlPanelComponent a zabaliť ich 123 // do nášho appletu. 124 myVisual = myPlayer.getVisualComponent (); 125 if (myVisual! = Null) {126 // Aby sa zaistilo, že veľkosť súboru VisualComponent 127 // nebude zmenená pomocou BorderLayout, vnorím ho 128 // do vizuálneho panela pomocou FlowLayout. 129 visualPanel = nový Panel (); 130 visualPanel.setLayout (nový FlowLayout ()); 131 visualPanel.add (myVisual); 132 pridať (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 // invalidate (); 141 potvrdiť (); 142} 143 // V opačnom prípade udalosť jednoducho spotrebujeme. 144} 145}

Zahrnul som jednoduchý príklad dokumentu HTML, example.html (ktorý si teraz môžete vyskúšať v prehliadači kliknutím sem), aby som vám ukázal, ako vložiť applet na svoje vlastné webové stránky. Jednoducho zmeňte mediálny súbor v priečinku MAJETOK označte a môžete vyraziť!

V tomto príklade som použil JMF 1.1 na stiahnutie webových serverov (zdokumentované na webe JMF), aby som povolil JMF11Applet automaticky stiahnuť jmf-server.jar, archív kódov obsahujúci potrebné runtime triedy JMF. To umožňuje appletu vykonávať sa v ľubovoľnom prehľadávači kompatibilnom s Java 1.1 bez nutnosti inštalácie softvéru pre koncového používateľa. (Upozorňujeme, že verzia JMF pre webové servery obsahuje aj nástroj na prispôsobenie, JMFCustomizer, ktoré vám potenciálne umožnia odstrániť ešte viac nepotrebných tried zo súboru JMF JAR. Tento nástroj v súčasnosti nefunguje v prostredí Java 2, pretože pre server Swing používa zastaraný názov balíka.)

V konkrétnom príklade vloženom do priklad.html, načítame súbor WAV (welcome.wav), overíme, či sú k dispozícii príslušné ovládacie komponenty (žiadny video komponent, pretože ide o zvukový mediálny súbor), a prehráme multimediálny súbor. Pamätajte, že načítanie súborov WAV (600 kB) a JMF (570 kB) môže v závislosti od rýchlosti pripojenia trvať niekoľko minút.

Po analýze vzorovej stránky by mali prehliadače kompatibilné s Java 1.1 načítať applet a podporujúce triedy JMF automaticky z JavaWorld Webový server. Po načítaní a spustení appletu môžete stlačením tlačidla Prehrať spustiť prehrávanie zvukového súboru WAV. Skúste zmeniť umiestnenie prehrávania pomocou posúvača a pozastaviť a znova spustiť prehrávanie pomocou tlačidla Pozastaviť / Prehrať.

Implementácia platformy JMF 1.1 Java využíva pre svoje ovládacie prvky widgety typu Java, takže ovládacie prvky majú rovnaký vzhľad od prehliadača k prehliadaču a od platformy k platforme. Všimnite si, ako vyzerá applet bežiaci v prostredí JVM spoločnosti Netscape Communicator na systéme Solaris 7 a JVM spoločnosti Microsoft v programe Internet Explorer na systéme Win32.

Tlačidlo označené i poskytuje informácie o prehrávaní mediálneho súboru v applete JMF. Kliknutím na tento informačný odkaz získate ďalšie informácie o súbore WAV spustenom na tejto webovej stránke.

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