Programavimas

JMF ir „Java Media“ API pažanga

Pirmasis mano „JavaWorld“ straipsnis atgalinis laikas buvo „Java Media Framework“ (JMF). Kai subręsta įvairios medijos API, jaučiu, kad viskas apėjo visą ratą. Todėl skirsiu savo finalą Žiniasklaidos programavimas stulpelį, kad peržiūrėtumėte JMF ir bendrą visų „Java Media“ API būseną.

Buvo pastebimų pokyčių JMF ir kitose „Java Media“ technologijose, įmonėse, kuriančiose jų diegimą, ir jų prieinamumo kūrėjams. Šis straipsnis atitinkamai atnaujina ankstesnių straipsnių medžiagą.

Svarbus priminimas: „Java Media Framework“ yra specifinė daugialypės terpės srautų (failų, tinklo srautų ir pan.) Sinchronizavimo API. Tai yra viena iš kelių „Java Media“ API, kuri taip pat apima „Java 2D“, „Java 3D“, „Java Speech“ ir pan. Aš vadinu „Java Media Framework“ kaip JMF, rezervuodamas terminą „Java Media“ visam daugialypės terpės API rinkiniui.

JMF istorija ir pagrindai

Iš „JMF 1.0“, dar žinomo kaip „Java Media Player“ API, 1997 m. Balandžio mėn. Parašiau:

„Java Media Player“ API, „Java Media Framework“ (JMF) dalis, leidžia „Java“ programuotojams lengvai įterpti garso ir vaizdo įrašus į programėles ir programas. Statinė ir srautinė daugialypė terpė palaikoma iš bet kurio galiojančio URL. JMF grotuvus gali valdyti kiti grotuvai, užtikrindami sinchroninį daugelio garso ir vaizdo pavyzdžių atkūrimą.

Ši informacija vis dar galioja atnaujinus ir papildžius pastaruosius dvejus metus. Tačiau JMF išplėtojo naujas galimybes ir išplėtė savo apimtį, ypač su būsimu 2.0 API leidimu (tikimasi 1999 m. Antroje pusėje).

JMF pramonės žaidėjai

Pirmiausia pažvelkime į pramonės dalyvius. „Sun“, „Silicon Graphics“ (SGI) ir „Intel“ sukūrė ir patikslino originalų „JMF 1.0“ 1998 m. Viduryje. Nuo pradinės API versijos laikinai SGI ir „Intel“ pasitraukė iš JMF specifikacijų proceso. Kurį laiką JMF vartotojų bendruomenėje buvo didelis nerimas, kad „Sun“ yra vienintelis JMF palaikantis pardavėjas. Ši situacija buvo nepageidaujama.

Laimei, 1998 m. Pabaigoje IBM susidomėjo JMF. Netrukus po to, kai IBM prisijungė prie „Sun“, buvo išleistas „1.0“ visos Java versijos įdiegimas (1998 m. Gruodžio mėn.). Šis diegimas, žinomas kaip „Java“ platformoms skirtas JMF 1.1, palaiko ribotą, bet reikšmingą turinio ir protokolo tipų, palaikomų „Win32“ ir „Solaris“ JMF 1.1 diegimų (žinomas kaip spektaklių paketai). „Java“ JMF 1.1 prieinamumas buvo pagrindinis JMF etapas, nes ši technologija tapo prieinama bet kuriam „Java 1.1“ suderinamam arba „Java 2“ vykdymo laikui. Tiesą sakant, „JMF 1.1 Java“ diegimas yra netgi žiniatinklio versijoje su įrankiais, leidžiančiais kūrėjams į JAR failą įtraukti tik atitinkamas JMF klases, kad būtų galima atsisiųsti su JMF programėlėmis. Tai leidžia viename žiniatinklio serveryje dislokuoti JMF pagrindu sukurtas programėles, kurias gali naudoti bet kuri „Java 1.1“ suderinama naršyklė. Tiek „Netscape“, tiek „Microsoft“ palaiko „Java 1.1“, taigi ir „JMF 1.1“, skirtą „Java“, naujausiuose naršyklės leidimuose, atitinkamai „Navigator“ ir „Internet Explorer“.

IBM padeda „Sun“ koduoti „JMF 2.0“ API, į kurią bus įtraukta specifikacija ir pateikta kito JMF API nuoroda: „Java Media Capture“. Tikėkimės, kad IBM išsiaiškins, kaip vėliau įtraukti JMF funkcionalumą į kai kuriuos į savo verslą orientuotus „Java“ pagrindu sukurtus programinės įrangos produktus - tai gali būti naudinga JMF technologijos ilgaamžiškumui.

Kas naujo JMF 2.0 ir 1.0?

JMF 1.0 API nurodo komponentus, reikalingus sinchronizuoto garso ir vaizdo atkūrimui tvarkyti. Peržiūrėkite mano ankstesnį JMF straipsnį (žr. Ištekliai), kuriame rasite „JMF 1.0“ galimybių apžvalgą.

JMF 2.0 pateikia keletą pagrindinių specifikacijos papildymų:

  • Garso ir vaizdo įrašymas
  • Garso ir vaizdo srautas, taigi galimybė kartu su klientais kurti ir visus „Java“ srautinio perdavimo serverius
  • Prijungiamas kodekų palaikymas grotuvuose

Norėdami gauti daugiau informacijos apie JMF 2.0 ir jo naujas galimybes, skaitykite „Java Media Framework“ programuotojo vadovas (žr. išteklius), šiuo metu prieinama ankstesnės versijos 0.5 versijoje.

JMF kūrimo įrankių ir vykdymo laiko diegimas

Tiek „Silicon Graphics“, tiek „Intel“ pašalino ankstesnes JMF versijas iš savo atitinkamų svetainių. Tačiau galite atsisiųsti naujausias „Win32“, „Solaris“ ir „Java“ platformų nuorodas (žymimas JMF 1.1, atitinkančią 1.0 API specifikacijas) iš „Sun“ svetainės (žr. Ištekliai).

Atkreipkite dėmesį, kad visos „Java“ versijos dokumentuose konkrečiai minimas AIX, nurodant, kad „IBM“ testavo šią programinę įrangą savo „AIX Java“ vykdymo metu. Tikiuosi, kad būsimi JMF leidimai (2.0 ir naujesnės versijos) bus specialiai palaikomi IBM operacinėse aplinkose, naudojant gryną „Java“ diegimą arba OS specifinius savuosius diegimus.

Atnaujinti JMF pavyzdžiai

Atnaujinau JMF 1.0 beta reikalavimus atitinkantį pavyzdį iš savo ankstesnio JMF straipsnio, kad jis būtų paleistas JMF 1.0 API suderinamose aplinkose. Kodo pavyzdį galite atsisiųsti ir išbandyti JMF 1.1 diegimuose naudodami savo medijos failus. Programėlė taip pat turėtų veikti JMF 2.0 vykdymo metu, kai jie bus pasiekiami. (Norėdami atsisiųsti visus su šiuo straipsniu susietus failus ZIP formatu, žr. Ištekliai.)

001 // Pakomentuokite šį paketo teiginį, kad galėtumėte sudaryti atskirai. 002 // paketas com.javaworld.media.jmf; 003 004 importuoti java.applet. *; 005 importuoti java.awt. *; 006 importuoti java.net. *; 007 importuoti java.io. *; 008 importuoti javax.media. *; 009 010 / ** 011 * JMF11Applet atnaujina JMFApplet nuo 1997 m. Balandžio mėn. 012 * JavaWorld straipsnio JMF 1.1 API atitikčiai. Prašome 013 * žiūrėti straipsnį:

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

016 * Be to, „JMF11Applet“ buvo perdarytas į 017 * naudoti „Java 1.1“ (ir naujesnių versijų) įvykių modelį. Ši 018 * versija buvo sukurta ir išbandyta naudojant „Java 2 019 *“ ir „JMF 1.1 all-Java“ diegimą, 1999 m. Gegužės mėn. 020 *

021 * Ši programėlė gali būti dislokuota viešuose žiniatinklio serveriuose 022 * naudojant „jmf-server.jar“, pateiktą JMF 1.1 023 *, skirtą žiniatinklio serveriams atsisiųsti. Šiame JAR archyve yra 024 * būtinų „JMF all-Java“ vykdymo laiko klasių. JMF11Applet 025 * buvo įdiegtas tokiu būdu 1999 m. Birželio mėn. Stulpelyje 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 public class JMF11A Programėlė įgyvendina „ControllerListener“ {040 privatų URL myURL = null; 041 privatus grotuvas myPlayer = null; 042 privatus komponentas myVisual = null; 043 privatus komponentas myControls = null; 044 privatus skydelis „visualPanel“ = null; 045 046 / ** 047 * Inicializuokite „JMF11Applet“. Mes išdėstome sąsają ir 048 * sukuriame savo grotuvą init (). 049 ** / 050 public void init () {051 super.init (); 052 053 // Nurodykite AWT išdėstymo tvarkyklę. 054 setLayout (naujas „BorderLayout“); 055 056 // Įkelti URL iš tinklalapio JMF11Applet yra įdėtas. 057 String asset = getParameter ("ASSET"); 058 059 // Patikrinkite URL ir sukurkite URL objektą jį laikyti. 060 if (asset.equals ("")) {061 // mes programoje neįvedėme turto. 062} dar {063 pabandykite {064 myURL = naujas URL (getDocumentBase (), turtas); 065} catch („MalformedURLException e“) {066 // Įvedėme neišsamų išteklių arba sukūrėme neteisingą URL. 067 // Tvirtesnė programėlė turėtų tai tvarkyti grakščiai. 068} 069} 070 pabandykite {071 // Štai įdomus dalykas. Tvarkyklė yra įpratusi prie 072 // sukurti tikrąjį grotuvą šiam URL. Tada mes pridėjome 073 // JMF11Applet kaip „myPlayer“ „ControllerListener“. 074 // Tai leidžia mums atsakyti į „RealizeCompleteEvents“. 075 myPlayer = Manager.createPlayer (myURL); 076 myPlayer.addControllerListener (tai); 077} gaudyti (IOException e) {078 // Susidūrė su I / O problema; išėjimas. 079 System.out.println ("I / O problema bandant sukurti grotuvą ... išeinama"); 080 „System.exit“ (1); 081} catch (NoPlayerException e) {082 // Nepavyko grąžinti tinkamo grotuvo; išėjimas. 083 System.out.println ("Nei vienas tinkamas grotuvas negrąžintas ... išeina"); 084 „System.exit“ (1); 085} 086} 087 088 / ** 089 * Nepaisykite numatytojo programėlės paleidimo būdo, kad paskambintumėte grotuvo 090 * realizuoti (). Pirmiausia tai bus realizuota, o tai savo ruožtu 091 * suaktyvins paskutinius GUI kūrimo bitus „controllerUpdate () 092 *“ metodu. Mes automatiškai nepradedame atkūrimo: vartotojui reikia 093 *, kad spustelėtų mygtuką „paleisti“ mūsų programėlėje, kad būtų galima paleisti 094 * medijos pavyzdį. 095 ** / 096 public void start () {097 myPlayer.realize (); 098} 099 100 101 / ** 102 * Nepaisykite numatytojo programėlės sustabdymo metodo, norėdami iškviesti myPlayer.stop () 103 * ir myPlayer.deallocate (), kad tinkamai atlaisvintume išteklius 104 *, jei kas nors išeina iš šio puslapio savo naršyklėje. 105 ** / 106 viešoji niekinė stotelė () {107 myPlayer.stop (); 108 „myPlayer.deallocate“); 109} 110 111 / ** 112 * Kadangi turime žinoti, kada realizavimas baigtas, „RealizeCompleteEvents“ tvarkymui naudojame 113 * controllerUpdate (). 114 * Gavę „RealizeCompleteEvent“, mes išdėstome 115 * ir vaizduojame vaizdo komponentą bei valdiklius savo 116 * programėlių GUI. 117 ** / 118 public void controllerUpdate (ControllerEvent event) {119 if (eventize of RealizeCompleteEvent) {120 //System.out.println("Received RCE ... "); 121 // Dabar, kai turime realizuotą grotuvą, galime gauti 122 // VisualComponent ir ControlPanelComponent ir pakuoti 123 // juos į savo programėlę. 124 myVisual = myPlayer.getVisualComponent (); 125 if (myVisual! = Null) {126 // Siekdamas užtikrinti, kad „VisualComponent 127 //“ dydis nebūtų pakeistas „BorderLayout“, aš jį įterpiu 128 // „visualPanel“ naudodamas „FlowLayout“. 129 „visualPanel“ = nauja skydelis (); 130 „visualPanel.setLayout“ (naujas „FlowLayout“ ()); 131 „visualPanel.add“ („myVisual“); 132 pridėti („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("Pridėti valdikliai ... "); 139} 140 // pripažinti negaliojančiu (); 141 patvirtinti (); 142} 143 // Kitu atveju mes paprasčiausiai vartojame įvykį. 144} 145}

Įtraukiau paprastą HTML dokumento pavyzdį example.html (kurį dabar galite išbandyti savo naršyklėje spustelėdami čia), kad parodytumėte, kaip įdėti programėlę į savo tinklalapius. Tiesiog pakeiskite medijos failą TURTAS žyma ir tu eik!

Šiame pavyzdyje aš naudojau JMF 1.1, skirtą atsisiųsti žiniatinklio serveriams (dokumentuotas JMF svetainėje), kad įjungčiau JMF11Applet automatiškai atsisiųsti jmf-server.jar, kodų archyvą, kuriame yra būtinos JMF vykdymo laiko klasės. Tai leidžia programėlę vykdyti bet kurioje „Java 1.1“ suderinamoje naršyklėje, be galutiniam vartotojui skirtos programinės įrangos. (Atminkite, kad „JMF for Web Server“ versijoje taip pat yra pritaikymo įrankis, „JMFCustomizer“, tai potencialiai leis iš JMF JAR failo pašalinti dar daugiau nereikalingų klasių. Šis įrankis šiuo metu neveikia naudojant „Java 2“, nes „Swing“ naudoja pasenusį paketo pavadinimą.)

Konkrečiame pavyzdyje, įdėtame į pavyzdys.html, mes įkeliame WAV failą (welcome.wav), nustatome tinkamus valdymo komponentus, kad jie būtų prieinami (nėra vaizdo komponentų, nes tai yra tik garso garso ir vaizdo failas) ir atkuriame daugialypės terpės failą. Atminkite, kad WAV failą (600 KB) ir JMF klases (570 KB) gali prireikti kelių minučių atsisiųsti į jūsų kompiuterį, atsižvelgiant į jūsų ryšio greitį.

Išanalizavus puslapio pavyzdį, „Java 1.1“ suderinamos naršyklės turėtų automatiškai įkelti programėlę ir palaikyti JMF klases iš „JavaWorld“ Tinklapio serveris. Kai programėlė bus įkelta ir paleista, galite paspausti mygtuką „Leisti“, kad pradėtumėte WAV garso failo atkūrimą. Pabandykite perkelti atkūrimą naudodami slinkties juostą, o sustabdyti ir paleisti atkūrimą naudodami mygtuką „Pauzė / atkūrimas“.

„JMF 1.1 Java“ platformos valdymas valdymui naudoja visus „Java“ valdiklius, todėl valdiklių išvaizda skiriasi nuo naršyklės iki naršyklės ir platformos. Atkreipkite dėmesį, kaip programėlė atrodo veikianti „Netscape Communicator“ JVM sistemoje „Solaris 7“ ir „Microsoft“ JVM programoje „Internet Explorer“ sistemoje „Win32“.

Mygtukas pažymėtas i pateikia informaciją apie medijos failą, leidžiamą JMF programėlėje. Spustelėkite šią informacijos nuorodą, jei norite gauti išsamios informacijos apie šiame tinklalapyje veikiantį WAV failą.