Programmēšana

Progress JMF un Java Media API

Mans pirmais JavaWorld raksts atpakaļ-kad bija Java Media Framework (JMF). Kad dažādās Media API ir nobriedušas, es uzskatu, ka viss ir noticis pilnā lokā. Tāpēc es veltīšu savu finālu Mediju programmēšana kolonnā, lai pārskatītu JMF un visu Java Media API vispārējo stāvokli.

Ir notikušas dažas ievērojamas izmaiņas JMF un citās Java Media tehnoloģijās, uzņēmumos, kas izstrādā to ieviešanu, un to pieejamību izstrādātājiem. Šis raksts attiecīgi atjaunina iepriekšējo rakstu materiālu.

Svarīgs atgādinājums: Java Media Framework ir īpaša API multivides straumju (failu, tīkla straumju utt.) Sinhronizēšanai. Tas ir viens no vairākiem Java Media API, kas ietver arī Java 2D, Java 3D, Java Speech utt. Es atsaucos uz Java Media Framework kā JMF, rezervējot termiņu Java Media visai multivides API kolekcijai.

JMF vēsture un pamati

No JMF 1.0, jeb Java Media Player API, es 1997. gada aprīlī uzrakstīju sekojošo (skatīt resursus):

Java Media Player API, kas ir Java Media Framework (JMF) daļa, ļauj Java programmētājiem viegli iegult audio un video sīklietotnēs un lietojumprogrammās. Gan statiskā, gan straumējošā multivide tiek atbalstīta no jebkura derīga URL. JMF atskaņotājus var kontrolēt citi atskaņotāji, nodrošinot vairāku audio un video paraugu sinhronu atskaņošanu.

Šī informācija joprojām atbilst patiesībai ar pēdējo divu gadu atjauninājumiem un papildinājumiem. JMF tomēr ir attīstījis jaunas iespējas un paplašinājis darbības jomu, īpaši ar gaidāmo 2.0 API izlaišanu (paredzams 1999. gada otrajā pusē).

JMF nozares spēlētāji

Vispirms apskatīsim nozares dalībniekus. 1998. gada vidū Sun, Silicon Graphics (SGI) un Intel izstrādāja un specifikēja oriģinālo JMF 1.0. Kopš API sākotnējās versijas gan SGI, gan Intel ir izstājušies no JMF specifikācijas procesa. Kādu laiku JMF lietotāju kopienā bija lielas bažas, ka Sun ir vienīgais JMF atbalstītājs. Šī situācija bija nevēlama.

Par laimi, 1998. gada beigās IBM ar interesi iesaistījās JMF. Neilgi pēc tam, kad IBM pievienojās Sun, tika izlaista 1.0 API visa Java ieviešana (1998. gada decembris). Šī ieviešana, kas Java platformām ir pazīstama kā JMF 1.1, atbalsta ierobežotu, bet ievērojamu satura un protokolu veidu apakškopu, ko atbalsta Win32 un Solaris dzimtā JMF 1.1 ieviešana (pazīstama kā veiktspējas paketes). Visu Java JMF 1.1 pieejamība bija liels pagrieziena punkts JMF, jo tehnoloģija kļuva pieejama jebkuram Java 1.1 saderīgam vai Java 2 izpildlaika. Faktiski JMF 1.1 Java ieviešana ir pieejama pat tīmekļa versijā ar rīkiem, kas ļauj izstrādātājiem JAR failā iekļaut tikai attiecīgās JMF klases, lai lejupielādētu kopā ar viņu JMF sīklietotnēm. Tas ļauj Web serverī izvietot uz JMF balstītas sīklietotnes jebkurai Java 1.1 saderīgai pārlūkprogrammai. Gan Netscape, gan Microsoft atbalsta Java 1.1 - un līdz ar to JMF 1.1 Java - savos nesenajos pārlūka laidienos attiecīgi Navigator un Internet Explorer.

IBM palīdz Sun kodificēt JMF 2.0 API, kas ietvers specifikāciju un sniegs atsauces ieviešanu nākamajai JMF API: Java Media Capture. Cerēsim, ka IBM izdomās, kā pēc tam iekļaut JMF funkcionalitāti dažos savos uz biznesu orientētajos Java balstītajos programmatūras produktos - potenciāli laba lieta JMF tehnoloģijas ilgmūžībai.

Kas jauns JMF 2.0 pret 1.0?

JMF 1.0 API norāda komponentus, kas nepieciešami sinhronizēta audio un video atskaņošanai. Lūdzu, skatiet manu iepriekšējo JMF rakstu (skatiet resursus), lai apskatītu JMF 1.0 iespējas.

JMF 2.0 specifikācijā veic vairākus galvenos papildinājumus:

  • Audio un video uzņemšana
  • Audio un video straumēšana un tādējādi iespēja papildus klientiem izveidot visu Java straumēšanas serverus
  • Pluggable kodeku atbalsts atskaņotājos

Lai iegūtu papildinformāciju par JMF 2.0 un tā jaunajām iespējām, lūdzu, skatiet Java Media Framework programmētāja rokasgrāmata (skatīt resursus), kas pašlaik ir pieejama agrīnās piekļuves versijā 0.5.

JMF izstrādes rīku un izpildlaika instalēšana

Gan Silicon Graphics, gan Intel ir noņēmušas iepriekšējās JMF versijas no attiecīgajām vietnēm. Tomēr jūs varat lejupielādēt jaunākās atsauces ieviešanas iespējas (apzīmētas ar JMF 1.1, kas atbilst 1.0 API specifikācijai) Win32, Solaris un Java platformām no vietnes Sun (skatiet resursus).

Ņemiet vērā, ka visas Java versijas dokumentācijā ir īpaši pieminēts AIX, norādot, ka IBM ir testējis šo programmatūru savā AIX Java izpildlaikā. Es ceru, ka turpmākie JMF (2.0 un jaunāki) izlaidumi īpaši atbalstīs IBM operētājsistēmas, izmantojot tīru Java ieviešanu vai OS specifiskas vietējās ieviešanas.

Atjaunināti JMF piemēri

Esmu atjauninājis JMF 1.0 beta savietojamības piemēru no sava iepriekšējā JMF raksta, lai tas darbotos JMF 1.0 API saderīgās vidēs. Koda paraugu varat lejupielādēt un izmēģināt sadaļā JMF 1.1, izmantojot savus multivides failus. Sīklietotnei jādarbojas arī JMF 2.0 izpildlaikos, kad tie kļūst pieejami. (Lai lejupielādētu visus ar šo rakstu saistītos failus zip formātā, skatiet resursus.)

001 // Komentējiet šo pakotnes paziņojumu, lai apkopotu atsevišķi. 002 // pakete com.javaworld.media.jmf; 003 004 importēt java.applet. *; 005 importēt java.awt. *; 006 importēt java.net. *; 007 importēt java.io. *; 008 importēt javax.media. *; 009 010 / ** 011 * JMF11Applet atjaunina JMFApplet no 1997. gada aprīļa 012 * JavaWorld raksta JMF 1.1 API atbilstībai. Lūdzu, 013 * skatiet rakstu vietnē:

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

016 * Turklāt JMF11Applet ir pārstrādāts, lai 017 * izmantotu Java 1.1 (un jaunāku) notikumu modeli. Šī 018 * versija ir izstrādāta un testēta Java 2 019 * un JMF 1.1 all-Java ieviešanā, 1999. gada maijā. 020 *

021 * Šo sīklietotni var izvietot publiskos tīmekļa serveros 022 *, izmantojot jmf-server.jar, kas paredzēts JMF 1.1 023 * tīmekļa serveru lejupielādei. Šajā JAR arhīvā ir 024 * nepieciešamās JMF all-Java izpildlaika klases. JMF11Applet 025 * ir izvietots šādā veidā kolonnā 1999. gada jūnijs 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 Aplets īsteno ControllerListener {040 privāto URL myURL = null; 041 privātais spēlētājs myPlayer = null; 042 privātais komponents myVisual = null; 043 privātais komponents myControls = null; 044 privātā paneļa visualPanel = null; 045 046 / ** 047 * Inicializējiet JMF11Applet. Mēs izkārtojam saskarni un 048 * izveidojam savu atskaņotāju init (). 049 ** / 050 public void init () {051 super.init (); 052 053 // Norādiet AWT izkārtojuma pārvaldnieku. 054 setLayout (jauns BorderLayout ()); 055 056 // Ielādēt URL no tīmekļa lapas JMF11Applet ir iestrādāts. 057 String asset = getParameter ("ASSET"); 058 059 // Pārbaudiet URL un izveidojiet URL objektu, lai to turētu. 060 if (asset.equals ("")) {061 // mēs sīklietotnē neesam ievadījuši aktīvu. 062} else {063 try {064 myURL = new URL (getDocumentBase (), aktīvs); 065} catch (MalformedURLException e) {066 // Mēs ievadījām nepilnīgu īpašumu vai izveidojām nepareizu URL. 067 // Stingrākai sīklietotnei tas jārīkojas graciozi. 068} 069} 070 izmēģināt {071 // Šeit ir interesants gabals. Pārvaldnieks ir pieradis, lai 072 // izveidotu faktisko atskaņotāju šim URL. Pēc tam mēs 073 // pievienojam JMF11Applet kā myPlayer ControllerListener. 074 // Tas ļauj mums reaģēt uz RealizeCompleteEvents. 075 myPlayer = Manager.createPlayer (myURL); 076 myPlayer.addControllerListener (šis); 077} catch (IOException e) {078 // Radās kāda problēma ar I / O; Izeja. 079 System.out.println ("I / O problēma, mēģinot izveidot atskaņotāju ... iziet"); 080 System.exit (1); 081} catch (NoPlayerException e) {082 // Nevar atgriezt izmantojamu atskaņotāju; Izeja. 083 System.out.println ("Nav atgriezies neviens izmantojams spēlētājs ... iziet"); 084 System.exit (1); 085} 086} 087 088 / ** 089 * ignorēt noklusējuma sīklietotnes sākšanas metodi, lai izsauktu Player 090 * realizēt (). Tas vispirms veiks realizāciju, kas savukārt 091 * iedarbina GUI veidošanas pēdējos bitus controllerUpdate () 092 * metodē. Mēs automātiski nesākam atskaņošanu: lai sāktu atskaņot 094 * multivides paraugu, lietotājam ir nepieciešams 093 *, lai mūsu sīklietotnē noklikšķinātu uz pogas "atskaņot". 095 ** / 096 public void start () {097 myPlayer.realize (); 098} 099 100 101 / ** 102 * ignorēt noklusējuma sīklietotņu apstāšanās metodi, lai izsauktu myPlayer.stop () 103 * un myPlayer.deallocate (), lai mēs pareizi atbrīvotu resursus 104 *, ja kāds no savas lapas iziet no savas pārlūkprogrammas. 105 ** / 106 publiska anulēšana () {107 myPlayer.stop (); 108 myPlayer.deallocate (); 109} 110 111 / ** 112 * Tā kā mums jāzina, kad realizācija ir pabeigta, mēs izmantojam 113 * controllerUpdate (), lai apstrādātu RealizeCompleteEvents. 114 * Kad saņemam RealizeCompleteEvent, mēs izkārtojam 115 * un video komponentu un vadīklas parādām 116 * sīklietotnes GUI. 117 ** / 118 public void controllerUpdate (ControllerEvent event) {119 if (eventise of RealizeCompleteEvent) {120 //System.out.println("Received RCE ... "); 121 // Tagad, kad mums ir Realizēts atskaņotājs, mēs varam iegūt 122 // VisualComponent un ControlPanelComponent un iesaiņot 123 // tos savā sīklietotnē. 124 myVisual = myPlayer.getVisualComponent (); 125 if (myVisual! = Null) {126 // Lai nodrošinātu, ka VisualComponent 127 // izmērs netiek mainīts ar BorderLayout palīdzību, es to ligzdoju 128 // vietnē visualPanel, izmantojot FlowLayout. 129 visualPanel = jauns panelis (); 130 visualPanel.setLayout (jauns FlowLayout ()); 131 visualPanel.add (myVisual); 132 pievienot (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("Papildu vadīklas ... "); 139} 140 // nederēt (); 141 apstiprināt (); 142} 143 // Citādi mēs vienkārši patērējam notikumu. 144} 145}

Esmu iekļāvis vienkāršu HTML dokumenta piemēru example.html (kuru tagad varat izmēģināt pārlūkprogrammā, noklikšķinot šeit), lai parādītu, kā iegult sīklietotni savās tīmekļa lapās. Vienkārši nomainiet multivides failu AKTĪVI tag un prom!

Šajā piemērā es izmantoju JMF 1.1 tīmekļa serveru lejupielādei (dokumentēta JMF vietnē), lai iespējotu JMF11Applet lai automātiski lejupielādētu jmf-server.jar, kodu arhīvs, kurā ir nepieciešamās JMF izpildlaika klases. Tas ļauj sīklietotni izpildīt jebkurā pārlūkprogrammā, kas ir saderīga ar Java 1.1, bez programmatūras, ko galalietotājs varētu instalēt. (Ņemiet vērā, ka JMF tīmekļa serveriem versija ietver arī pielāgošanas rīku, JMFCpielāgotājs, kas potenciāli ļaus jums noņemt no JMF JAR faila vēl vairāk nevajadzīgu klašu. Šis rīks pašlaik nedarbojas zem Java 2, jo Swing izmanto novecojušu pakotnes nosaukumu.)

Konkrētajā piemērā, kas iestrādāts piemērs.html, mēs ielādējam WAV failu (welcome.wav), noskaidro atbilstošos vadības komponentus, lai tie būtu pieejami (nav video komponentu, jo tas ir tikai skaņas multivides fails) un atskaņojam multivides failu. Ņemiet vērā, ka WAV faila (600 KB) un JMF klases (570 KB) lejupielādei datorā var būt nepieciešamas vairākas minūtes, atkarībā no savienojuma ātruma.

Pēc parauga lapas parsēšanas Java 1.1 saderīgām pārlūkprogrammām automātiski jāielādē sīklietotne un jāatbalsta JMF klases JavaWorld Tīmekļa serveris. Kad sīklietotne ir ielādēta un darbojas, varat nospiest pogu Atskaņot, lai sāktu WAV skaņas faila atskaņošanu. Mēģiniet mainīt atskaņošanas pozīciju, izmantojot ritjoslu, un apturiet un atsāciet atskaņošanu, izmantojot pogu Pauze / Atskaņot.

JMF 1.1 Java platformas ieviešana kontrolei izmanto visus Java logrīkus, tāpēc vadības ierīcēm ir vienāds izskats no pārlūka uz pārlūku un platformu uz platformu. Ievērojiet, kā sīklietotne darbojas Netscape Communicator JVM sistēmā Solaris 7 un Microsoft JVM programmā Internet Explorer Win32.

Poga ar apzīmējumu i sniedz informāciju par multivides failu, kas tiek atskaņots JMF sīklietotnē. Noklikšķiniet uz šīs informācijas saites, lai iegūtu sīkāku informāciju par WAV failu, kas darbojas šajā tīmekļa lapā.

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