Ohjelmointi

Edistyminen JMF- ja Java Media -sovellusliittymissä

Ensimmäiseni JavaWorld artikkeli takaisin-milloin oli Java Media Frameworkissa (JMF). Kun erilaiset Media-sovellusliittymät ovat kypsyneet, mielestäni asiat ovat kulkeneet koko ympyrän. Siksi omistan finaalini Median ohjelmointi -sarakkeesta JMF: n ja kaikkien Java Media -sovellusliittymien yleisen tilan tarkasteluun.

JMF: ssä ja muissa Java Media -tekniikoissa, niiden toteutuksia kehittävissä yrityksissä ja niiden saatavuudessa kehittäjille on tapahtunut merkittäviä muutoksia. Tämä artikkeli päivittää edellisten artikkelien materiaalia tarvittaessa.

Tärkeä muistutus: Java Media Framework on erityinen sovellusliittymä multimediavirtojen (tiedostot, verkkovirrat ja niin edelleen) synkronointiin. Se on yksi monista Java Media -sovellusliittymistä, jotka sisältävät myös Java 2D: n, Java 3D: n, Java Speechin ja niin edelleen. Viittaan Java Media Frameworkiin JMF, varaamalla termi Java Media koko multimedia-sovellusliittymien kokoelmalle.

JMF: n historia ja perusteet

JMF 1.0: sta, alias Java Media Player -sovellusliittymästä, kirjoitin seuraavan huhtikuussa 1997 (katso Resurssit):

Java Media Player -sovellusliittymä, joka on osa Java Media Frameworkia (JMF), antaa Java-ohjelmoijille mahdollisuuden upottaa ääni ja video sovelmiin ja sovelluksiin. Sekä staattista että suoratoistomultimediaa tuetaan mistä tahansa kelvollisesta URL-osoitteesta. JMF-soittimia voivat ohjata muut soittimet, mikä mahdollistaa useiden ääni- ja videonäytteiden synkronisen toiston.

Nämä tiedot pitävät paikkansa kahden viime vuoden päivityksissä. JMF on kuitenkin kehittänyt uusia ominaisuuksia ja laajentanut toimintaansa, erityisesti tulevan 2.0 API -julkaisun myötä (odotettavissa vuoden 1999 jälkipuoliskolla).

JMF-alan toimijat

Ensinnäkin, katsotaanpa alan toimijoita. Sun, Silicon Graphics (SGI) ja Intel suunnittelivat ja määrittelivät alkuperäisen JMF 1.0: n vuoden 1998 puolivälissä. API: n alkuperäisen version jälkeen sekä SGI että Intel ovat vetäytyneet JMF-määrittelyprosessista. JMF-käyttäjäyhteisössä oli jonkin aikaa huomattava huoli siitä, että Sun oli ainoa JMF: ää tukeva toimittaja. Tämä tilanne ei ollut toivottava.

Onneksi vuoden 1998 lopulla IBM aloitti kiinnostuksensa JMF: ään. Pian sen jälkeen, kun IBM liittyi Suniin, 1.0-sovellusliittymän all-Java-toteutus julkaistiin (joulukuu 1998). Tämä toteutus, joka tunnetaan nimellä JMF 1.1 Java-alustoille, tukee rajoitettua, mutta merkittävää osajoukkoa sisällöistä ja protokollatyypeistä, joita Win32- ja Solaris-natiiviset JMF 1.1 -tuotteet (tunnetaan nimellä suorituskykypaketteja). Kaiken Java-JMF 1.1: n saatavuus oli merkittävä virstanpylväs JMF: lle, koska tekniikka tuli saataville kaikille Java 1.1 -yhteensopiville tai Java 2 -ajoille. Itse asiassa JMF 1.1 Java -toteutus on jopa saatavana verkkokeskeisenä versiona työkaluilla, joiden avulla kehittäjät voivat sisällyttää vain asiaankuuluvat JMF-luokat JAR-tiedostoon ladattavaksi JMF-sovelmiensa kanssa. Tämä mahdollistaa JMF-pohjaisten sovelmien asentamisen Web-palvelimeen minkä tahansa Java 1.1 -yhteensopivan selaimen käyttöön. Sekä Netscape että Microsoft tukevat Java 1.1 - ja siten JMF 1.1 Java - uusimmissa selainjulkaisuissaan Navigator ja Internet Explorer, vastaavasti.

IBM auttaa Sunia määrittelemään JMF 2.0 -sovellusliittymän, joka sisältää erittelyn ja tarjoaa seuraavan JMF-sovellusliittymän viitetoteutuksen: Java Media Capture. Toivotaan, että IBM selvittää, miten JMF-toiminnot voidaan myöhemmin sisällyttää joihinkin liiketoimintaan suuntautuneisiin Java-pohjaisiin ohjelmistotuotteisiinsa - mikä on mahdollisesti hyvä asia JMF-tekniikan pitkäikäisyydelle.

Mitä uutta JMF 2.0 vs. 1.0 sisältää?

JMF 1.0 -sovellusliittymä määrittää komponentit, jotka ovat tarpeen synkronoidun äänen ja videon toiston käsittelemiseksi. Katso edellisestä JMF-artikkelistani (katso Resurssit) katsaus JMF 1.0: n ominaisuuksiin.

JMF 2.0 tekee useita keskeisiä lisäyksiä spesifikaatioihin:

  • Ääni- ja videotallennus
  • Äänen ja videon suoratoisto ja siten mahdollisuus rakentaa kaikki Java-suoratoistopalvelimet asiakkaiden lisäksi
  • Pluggable koodekkituki pelaajissa

Lisätietoja JMF 2.0: sta ja sen uusista ominaisuuksista on Java Media Framework -ohjelmoijan opas (katso Resurssit), tällä hetkellä saatavana version 0.5 varhaisena.

JMF-kehitystyökalujen ja ajonaikaisen asennuksen asentaminen

Sekä Silicon Graphics että Intel ovat poistaneet JMF: n aiemmat versiot verkkosivustoistaan. Voit kuitenkin ladata Win32-, Solaris- ja Java-alustojen uusimmat viitetoteutukset (merkitty JMF 1.1, yhteensopiva 1.0-sovellusliittymäspesifikaation kanssa) Sun-sivustolta (katso Resurssit).

Huomaa, että all-Java-version dokumentaatiossa mainitaan nimenomaan AIX, mikä osoittaa, että IBM on testannut tätä ohjelmistoa AIX Java -aikana. Odotan, että JMF: n tulevat versiot (2.0 ja uudemmat) tukevat nimenomaan IBM: n käyttöympäristöjä, joko puhtaalla Java-toteutuksella tai käyttöjärjestelmäkohtaisilla alkuperäisillä toteutuksilla.

Päivitetyt JMF-esimerkit

Olen päivittänyt edellisen JMF-artikkelin JMF 1.0-beeta-yhteensopivan esimerkin toimimaan JMF 1.0 API -yhteensopivissa ympäristöissä. Voit ladata esimerkkikoodin ja kokeilla sitä JMF 1.1 -toteutuksissa omilla mediatiedostoillasi. Sovelman tulisi myös toimia JMF 2.0 -ajoilla, kun ne tulevat saataville. (Jos haluat ladata kaikki tähän artikkeliin liittyvät tiedostot zip-muodossa, katso Resurssit.)

001 // Kommentoi seuraava pakettilauseke kootaaksesi erikseen. 002 // paketti com.javaworld.media.jmf; 003 004 tuo java.applet. *; 005 tuo java.awt. *; 006 tuo java.net. *; 007 tuo java.io. *; 008 tuo javax.media. *; 0091010 / ** 011 * JMF11Applet päivittää JMFAppletin huhtikuussa 1997 julkaistusta 012 * JavaWorld-artikkelista JMF 1.1 -sovellusliittymän noudattamiseksi. Ole hyvä ja 013 * katso artikkeli:

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

016 * Lisäksi JMF11Applet on muokattu uudelleen 017 *: ksi käyttämällä Java 1.1 (ja uudempi) -tapahtumamallia. Tämä 018 * -versio on kehitetty ja testattu Java 2 019 * -sovelluksessa ja JMF 1.1 all-Java -toteutuksessa, toukokuu 1999. 020 *

021 * Tämä sovelma voidaan ottaa käyttöön julkisiin Web-palvelimiin 022 * käyttämällä JMF 1.1 023 * -verkkopalvelimien lataamiseen tarkoitettua jmf-server.jar-tiedostoa. Tämä JAR-arkisto sisältää 024 * tarvittavat JMF all-Java-ajonaikaluokat. JMF11Applet 025 * on otettu käyttöön tällä tavalla kesäkuun 1999 026 * -sarakkeessa:

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 julkinen luokka JMF11A Applet toteuttaa ControllerListener {040 yksityisen URL-osoitteen myURL = null; 041 yksityinen pelaaja myPlayer = null; 042 yksityinen komponentti myVisual = null; 043 yksityinen komponentti myControls = null; 044 yksityinen paneeli visualPanel = null; 045 046 / ** 047 * Alusta JMF11Applet. Asetamme käyttöliittymän ja 048 * luomme soittimen init (): ssä. 049 ** / 050 public void init () {051 super.init (); 052 053 // Määritä AWT Layout Manager. 054 setLayout (uusi BorderLayout ()); 055 056 // Lataa URL-osoite verkkosivulta JMF11Applet on upotettu. 057 String asset = getParameter ("ASSET"); 058 059 // Tarkista URL-osoite ja luo URL-objekti pitämään sitä. 060 if (asset.equals ("")) {061 // emme ole syöttäneet sisältöä sovelmaan. 062} muu {063 kokeile {064 myURL = uusi URL (getDocumentBase (), sisältö); 065} catch (MalformedURLException e) {066 // Annoimme epätäydellisen sisällön tai rakennimme virheellisen URL-osoitteen. 067 // Vankemman sovelman tulisi käsitellä tätä sulavasti. 068} 069} 070 kokeile {071 // Tässä on mielenkiintoinen pala. Hallinta on tottunut 072 // luomaan todellisen soittimen tälle URL-osoitteelle. Sitten 073 // lisätään JMF11Applet ControllerListeneriksi myPlayerille. 074 // Tämän avulla voimme vastata RealizeCompleteEvents-tapahtumiin. 075 myPlayer = Manager.createPlayer (myURL); 076 myPlayer.addControllerListener (tämä); 077} catch (IOException e) {078 // I / O: lla oli jokin ongelma; poistua. 079 System.out.println ("I / O-ongelma yritettäessä luoda soitinta ... poistumassa"); 080 System.exit (1); 081} catch (NoPlayerException e) {082 // käyttökelpoista pelaajaa ei voida palauttaa; poistua. 083 System.out.println ("Ei käytettävissä olevaa pelaajaa palautettu ... poistumassa"); 084 System.exit (1); 085} 086} 087 088 / ** 089 * Ohita oletusarvoinen sovelman aloitusmenetelmä soittaaksesi soittimen 090 * realiz () -ominaisuuteen. Tämä suorittaa ensin toteutuksen, joka puolestaan ​​091 * laukaisee GUI-rakennuksen viimeiset bitit controllerUpdate () 092 * -menetelmässä. Emme aloita toistoa automaattisesti: Käyttäjä tarvitsee 093 *: n napsauttamaan sovelmassamme olevaa "toista" -painiketta aloittaakseen 094 * medianäytteen toistamisen. 095 ** / 096 public void start () {097 myPlayer.realize (); 098} 099 100 101 / ** 102 * Ohita oletusarvoinen sovelman pysäytysmenetelmä kutsua myPlayer.stop () 103 * ja myPlayer.deallocate (), jotta vapauttamme resurssit 104 *, jos joku poistuu tältä sivulta selaimessaan. 105 ** / 106 public void stop () {107 myPlayer.stop (); 108 myPlayer.deallocate (); 109} 110 111 / ** 112 * Koska meidän on tiedettävä, kun toteutus on valmis, käytämme 113 * controllerUpdate () -sovellusta käsitelläksesi RealizeCompleteEvents-tapahtumia. 114 * Kun vastaanotamme RealizeCompleteEvent, asettelemme 115 * ja näytämme videokomponentin ja ohjaimet 116 * -sovelluksen käyttöliittymässämme. 117 ** / 118 public void controllerUpdate (ControllerEvent event) {119 if (eventize of RealizeCompleteEvent) {120 //System.out.println("Received RCE ... "); 121 // Nyt kun meillä on toteutettu soitin, voimme saada 122 // VisualComponent ja ControlPanelComponent ja pakata 123 // ne sovelmaamme. 124 myVisual = myPlayer.getVisualComponent (); 125 if (myVisual! = Null) {126 // Sen varmistamiseksi, että VisualComponent 127 //: n kokoa ei muuteta BorderLayout-toiminnolla, olen sijoittanut sen 128 // visualPaneliin FlowLayoutin avulla. 129 visualPanel = uusi paneeli (); 130 visualPanel.setLayout (uusi FlowLayout ()); 131 visualPanel.add (myVisual); 132 lisää (visualPanel, BorderLayout.CENTER); 133 //System.out.println("Lisätty VisualComponent ... "); 134} 135 myControls = myPlayer.getControlPanelComponent (); 136 if (myControls! = Null) {137 add (myControls, BorderLayout.SOUTH); 138 //System.out.println("Lisätyt ohjaimet ... "); 139} 140 // virheellinen (); 141 vahvista (); 142} 143 // Muutoin kulutamme vain tapahtuman. 144} 145}

Olen sisällyttänyt yksinkertaisen esimerkin HTML-dokumentista, example.html (jota voit kokeilla selaimessasi juuri nyt napsauttamalla tätä), joka näyttää sinulle, kuinka sovelma upotetaan omille verkkosivuillesi. Vaihda vain mediatiedosto VARAT merkitse ja lähdetään!

Tässä esimerkissä käytin JMF 1.1: tä Web-palvelimien lataamiseen (dokumentoitu JMF: n verkkosivustolla), jotta JMF11Applet ladata automaattisesti jmf-server.jar, koodiarkisto, joka sisältää tarvittavat JMF-ajonaikaluokat. Tämä antaa sovelman suorittaa missä tahansa Java 1.1 -yhteensopivassa selaimessa ilman loppukäyttäjän asennettavaa ohjelmistoa. (Huomaa, että JMF for Web Servers -versio sisältää myös mukautustyökalun, JMFCustomizer, jonka avulla voit poistaa vielä tarpeettomat luokat JMF JAR-tiedostosta. Tämä työkalu ei tällä hetkellä toimi Java 2: n alla, koska se käyttää vanhentunutta paketin nimeä Swingille.)

Tässä upotetussa esimerkissä esimerkki.html, lataamme WAV-tiedoston (welcome.wav), selvitämme sopivat ohjauskomponentit saataville (ei videokomponentteja, koska tämä on vain äänitiedostotiedosto), ja toistamme multimediatiedoston. Huomaa, että WAV-tiedosto (600 kt) ja JMF-luokat (570 kt) saattavat vaatia useita minuutteja lataamaan koneellesi yhteyden nopeudesta riippuen.

Kun olet jäsentänyt esimerkkisivun, Java 1.1 -yhteensopivien selainten tulisi ladata appletti ja tukea JMF-luokkia automaattisesti JavaWorld Verkkopalvelin. Kun sovelma on ladattu ja käynnissä, voit aloittaa WAV-äänitiedoston toiston painamalla Toista-painiketta. Yritä sijoittaa toisto uudelleen vierityspalkin avulla ja keskeyttää toisto ja aloittaa se uudelleen Tauko / Toista-painikkeella.

JMF 1.1 Java -alustan toteutus käyttää kaikki Java-widgettejä hallintaansa, joten ohjausobjektit ovat samanlaisia ​​ulkoasusta selaimesta selaimeen ja alustasta toiseen. Huomaa, kuinka sovelma näyttää toimivan Netscape Communicatorin JVM: ssä Solaris 7: ssä ja Microsoftin JVM: ssä Internet Explorerissa Win32: ssä.

Painike merkitty i tarjoaa tietoja JMF-sovelmassa toistettavasta mediatiedostosta. Napsauttamalla tätä tietolinkkiä saat lisätietoja tällä verkkosivulla käynnissä olevasta WAV-tiedostosta.