Java Media Framework - Java Media Framework

Java Media Framework
JMStudio-applikasjon
JMFs enkle JMStudio- applikasjon som spiller en QuickTime- film
Utvikler (er) Sun Microsystems
Stabil utgivelse
2.1.1e / 23. mai 2003  ( 2003-05-23 )
Skrevet i Java
Operativsystem Kryssplattform
Type Bibliotek for multimedia
Nettsted Java Media Framework API (JMF), på Oracle.com

Den Java Media Framework ( JMF ) er et Java -bibliotek som gjør at lyd, video og andre tidsbaserte medier som skal legges til Java -applikasjoner og applets. Denne valgfrie pakken, som kan fange opp, spille, streame og omkode flere medieformater , utvider Java Platform, Standard Edition (Java SE) og tillater utvikling av multimedia-applikasjoner på tvers av plattformer.

Versjoner og lisensiering

En første, bare avspillingsversjon av JMF ble utviklet av Sun Microsystems , Silicon Graphics og Intel , og ble utgitt som JMF 1.0 i 1997. JMF 2.0, utviklet av Sun og IBM , kom ut i 1999 og la til fange, streame, pluggbare kodeker. og koding. JMF er merket som en del av Suns "Desktop" -teknologi til J2SE i motsetning til Java-rammene for applikasjonsserver og klientside. De bemerkelsesverdige unntakene er Java-applets og Java Web Start , som har tilgang til full JMF i nettleseren eller appletviewers underliggende JRE.

JMF 2.0 ble opprinnelig levert med en MP3-dekoder og -koder. Dette ble fjernet i 2002, og en ny plug-in bare for MP3-avspilling ble lagt ut i 2004.

JMF-binærfiler er tilgjengelige under en tilpasset lisens, og kilden er tilgjengelig under SCSL .

Den nåværende versjonen leveres med fire JAR- filer og skallskript for å starte fire JMF-baserte applikasjoner:

  • JMStudio - En enkel spiller-GUI
  • JMFRegistry - En GUI for å administrere JMF "registeret", som administrerer preferanser, plugin-moduler, etc.
  • JMFCustomizer - Brukes til å lage en JAR-fil som bare inneholder klassene som trengs av et spesifikt JMF-program, som lar utviklere sende en mindre applikasjon.
  • JMFInit

JMF er tilgjengelig i en all-Java-versjon og som plattformsspesifikke "ytelsespakker", som kan inneholde innfødte kodespillere for plattformen, og / eller kobles til en multimediamotor spesifikk for den plattformen. JMF 2.0 tilbyr ytelsespakker for Linux, Solaris (på SPARC) og Windows.

I januar 2011 ga Tudor Holton fra Bentokit Project ut en Debian-pakke for JMF for å avhjelpe vanskeligheter som hadde oppstått over tid da JMF ble installert på Debian og Ubuntu Linux. Denne pakken inneholder ikke JMF, men presenterer brukeren JMF-lisensen, henter den fra Oracle-nettstedet og installerer den deretter. Et lignende Debian-pakkeinstallasjonsprogram for JMF MP3 Plugin ble også bygget i februar 2011.

Designkonsepter

JMF trekker ut media det jobber med til DataSource s (for media som leses inn i JMF) og DataSink s (for data som eksporteres ut). Det gir ikke utvikleren betydelig tilgang til detaljene i et gitt format; i stedet er media representert som kilder (i seg selv hentet fra URL-er) som kan leses inn og spilles, behandles og eksporteres (selv om ikke alle kodeker støtter prosessering og transkoding).

En Manager klasse tilbyr statiske metoder som er det primære kontaktpunktet med JMF for applikasjoner.

Kritikk og alternativer

Mange JMF-utviklere har klaget over at JMF-implementeringen i oppdaterte JRE-er støtter relativt få oppdaterte kodeker og formater. All-Java-versjonen, for eksempel, kan ikke spille MPEG-2 , MPEG-4 , Windows Media , RealMedia , de fleste QuickTime- filmer, Flash- innhold nyere enn Flash 2, og trenger en plugin for å spille det allestedsnærværende MP3- formatet. Mens ytelsespakker tilbyr muligheten til å bruke mediebiblioteket til den opprinnelige plattformen, tilbys de bare for Linux, Solaris og Windows. Spesielt forventer MS Windows-baserte JMF-utviklere som er nye for JMF ofte støtte for noen nyere formater på alle plattformer når slike formater bare faktisk støttes på MS Windows.

Mens JMF anses som et veldig nyttig rammeverk, lider den fritt tilgjengelige implementeringen fra Oracle av mangel på oppdateringer og vedlikehold. JMF får ikke mye vedlikeholdsinnsats fra Oracle; API har ikke blitt forbedret siden 1999, og den siste nyheten på JMFs hjemmeside ble lagt ut i september 2008. Mens JMF er bygget for utvidbarhet, er det få slike tredjepartsutvidelser. Videre er funksjonalitet for innholdsredigering i JMF effektivt fraværende. Du kan gjøre enkelt opptak og avspilling for lyd og video, men implementeringen fra Oracle kan ikke gjøre annet.

Plattformer utover de som Oracle gir støtte til, overlates til deres tilsvarende JRE-leverandører. Mens Sun fremdeles er et forum for diskusjon om implementeringen, har det vært flere anstrengelser for å implementere åpen kildekode-alternativer.

Alternativer

Avhengig av utviklerens behov, kan flere andre biblioteker være mer passende enn JMF. Disse inkluderer:

  • Freedom for Media in Java (FMJ) En API-kompatibel med JMF open source-alternativ
  • QuickTime for Java
  • IBM Toolkit for MPEG-4
  • Jffmpeg
  • vlcj
  • gstreamer-java
  • Cortado, en komplett spiller for Ogg Vorbis og Theora i en Java-applet
  • Directshow <> Java Wrapper
  • JLayer MP3-bibliotek
  • Video4Linux4Java

Kodeeksempel

Følgende eksempel viser en AWT -filvalgdialog, og prøver å laste inn og spille av mediefilen som er valgt av brukeren.

import javax.media.*;
import java.io.File;
import java.awt.*;

public class TrivialJMFPlayer extends Frame {

    public static void main (String[] args) {
        try {
            Frame f = new TrivialJMFPlayer();
            f.pack();
            f.setVisible (true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public TrivialJMFPlayer() 
        throws java.io.IOException,
               java.net.MalformedURLException,
               javax.media.MediaException {
        FileDialog fd = new FileDialog
            (this, "TrivialJMFPlayer", FileDialog.LOAD);
        fd.setVisible(true);
        File f = new File(fd.getDirectory(), fd.getFile());
        Player p = Manager.createRealizedPlayer
            (f.toURI().toURL());
        Component c = p.getVisualComponent();
        add(c);
        p.start();
    }
}

Mye av eksemplet er involvert i byggingen av AWT GUI. Bare to linjer berører JMF. Manager.createRealizedPlayer() implisitt oppretter en DataSource fra en URL-representasjon av filen, oppretter en Player , og innser den, noe som betyr at alle ressurser som er nødvendige for avspilling blir allokert og initialisert. Den getVisualComponent() ber Player om en AWT som er Component egnet for bruk i en GUI. Hvis en kontrollkomponent var ønsket, ville den fås med getControlPanelComponent() og legges til GUI separat. Vær oppmerksom på at utvikleren ikke er opptatt av formatet til media - denne koden fungerer like bra for ethvert medieformat som JMF kan importere og lese.

Referanser