Ramy mediów Java
Deweloperzy | Mikrosystemy Słońca |
---|---|
Wersja stabilna | 2.1.1e / 23 maja 2003
|
Napisane w | Jawa |
System operacyjny | Międzyplatformowe |
Typ | Biblioteka dla multimediów |
Strona internetowa | Java Media Framework API (JMF) na Oracle.com |
Java Media Framework ( JMF ) to biblioteka Java , która umożliwia dodawanie audio, wideo i innych multimediów opartych na czasie do aplikacji i apletów Java . Ten opcjonalny pakiet, który umożliwia przechwytywanie, odtwarzanie, przesyłanie strumieniowe i transkodowanie wielu formatów multimediów , rozszerza platformę Java w wersji Standard Edition (Java SE) i umożliwia tworzenie wieloplatformowych aplikacji multimedialnych.
Wersje i licencjonowanie
Początkowa wersja JMF przeznaczona tylko do odtwarzania została opracowana przez firmy Sun Microsystems , Silicon Graphics i Intel i wydana jako JMF 1.0 w 1997 r. JMF 2.0, opracowany przez firmy Sun i IBM , pojawił się w 1999 r. i dodał przechwytywanie, przesyłanie strumieniowe, podłączane kodeki i transkodowanie. JMF jest oznaczony jako część technologii J2SE „Desktop” firmy Sun, w przeciwieństwie do ram aplikacji Java po stronie serwera i klienta. Godnymi uwagi wyjątkami są aplety Java i Java Web Start , które mają dostęp do pełnego JMF w podstawowym środowisku JRE przeglądarki internetowej lub przeglądarki apletów.
JMF 2.0 był pierwotnie dostarczany z dekoderem i koderem MP3. Zostało to usunięte w 2002 roku, a nowa wtyczka tylko do odtwarzania plików MP3 została opublikowana w 2004 roku.
Pliki binarne JMF są dostępne na licencji niestandardowej, a źródła są dostępne na licencji SCSL .
Obecna wersja jest dostarczana z czterema plikami JAR i skryptami powłoki do uruchamiania czterech aplikacji opartych na JMF:
- JMStudio — prosty graficzny interfejs użytkownika odtwarzacza
- JMFRegistry — GUI do zarządzania „rejestrem” JMF, który zarządza preferencjami, wtyczkami itp.
- JMFCustomizer — używany do tworzenia pliku JAR, który zawiera tylko klasy wymagane przez określoną aplikację JMF, co umożliwia programistom wysyłanie mniejszej aplikacji.
- JMFInit
JMF jest dostępny w wersji całkowicie Java oraz jako „pakiety wydajności” specyficzne dla platformy, które mogą zawierać odtwarzacze kodu natywnego dla platformy i / lub podłączać się do silnika multimedialnego specyficznego dla tej platformy. JMF 2.0 oferuje pakiety wydajności dla systemów Linux, Solaris (na SPARC) i Windows.
W styczniu 2011 r. Tudor Holton z Bentokit Project wydał pakiet Debiana dla JMF, aby złagodzić trudności, które pojawiły się w czasie podczas instalowania JMF w systemie Debian i Ubuntu Linux. Ten pakiet nie zawiera JMF, ale przedstawia użytkownikowi licencję JMF, pobiera ją ze strony internetowej Oracle, a następnie instaluje. Podobny pakietu Debiana dla wtyczki JMF MP3 został również zbudowany w lutym 2011 roku.
Koncepcje projektowe
JMF wyodrębnia media, z którymi pracuje, do DataSource
s (dla mediów odczytywanych do JMF) i DataSink
s (dla eksportowanych danych). Nie zapewnia programiście znaczącego dostępu do szczegółów dowolnego formatu; media są raczej reprezentowane jako źródła (same uzyskane z adresów URL), które można odczytywać, odtwarzać, przetwarzać i eksportować (chociaż nie wszystkie kodeki obsługują przetwarzanie i transkodowanie).
Klasa Manager
oferuje metody statyczne, które są głównym punktem kontaktu z JMF dla aplikacji.
Krytyka i alternatywy
Wielu programistów JMF skarżyło się, że implementacja JMF dostarczana w aktualnych środowiskach JRE obsługuje stosunkowo niewiele aktualnych kodeków i formatów. Na przykład jego wersja całkowicie Java nie może odtwarzać MPEG-2 , MPEG-4 , Windows Media , RealMedia , większości filmów QuickTime , zawartości Flash nowszej niż Flash 2 i wymaga wtyczki do odtwarzania wszechobecnego MP3 format. Chociaż pakiety wydajności oferują możliwość korzystania z biblioteki multimediów platformy natywnej, są one oferowane tylko dla systemów Linux, Solaris i Windows. W szczególności programiści JMF pracujący w systemie MS Windows, nowi w JMF, często oczekują obsługi niektórych nowszych formatów na wszystkich platformach, podczas gdy w rzeczywistości takie formaty są obsługiwane tylko w systemie MS Windows.
Podczas gdy JMF jest uważany za bardzo użyteczną platformę, ogólnodostępna implementacja zapewniana przez Oracle cierpi na brak aktualizacji i konserwacji. JMF nie otrzymuje od Oracle dużych nakładów na konserwację; interfejs API nie był ulepszany od 1999 r., a ostatnia wiadomość na stronie głównej JMF została opublikowana we wrześniu 2008 r. Chociaż JMF jest zbudowany z myślą o rozszerzalności, istnieje niewiele takich rozszerzeń innych firm. Ponadto funkcjonalność edycji treści w JMF praktycznie nie istnieje. Możesz wykonać proste nagrywanie i odtwarzanie audio i wideo, ale implementacja dostarczona przez Oracle nie może zrobić nic więcej.
Platformy inne niż te, którym Oracle zapewnia wsparcie, pozostawia się odpowiednim dostawcom JRE. Chociaż Sun nadal zapewnia forum do dyskusji na temat jego implementacji, podjęto kilka prób wdrożenia alternatywnych rozwiązań open source.
Alternatywy
W zależności od potrzeb programisty, kilka innych bibliotek może być bardziej odpowiednich niż JMF. Obejmują one:
- Freedom for Media in Java (FMJ) Interfejs API kompatybilny z alternatywą open source JMF
- QuickTime dla Javy
- IBM Toolkit dla MPEG-4
- Jffmpeg
- vlcj
- gstreamer-java
- Cortado , kompletny odtwarzacz dla Ogga Vorbisa i Theory w aplecie Java
- Directshow <> Java Wrapper
- Biblioteka JLayer MP3
- Wideo4Linux4Java
Przykład kodu
Poniższy przykład przedstawia okno dialogowe wyboru pliku AWT oraz próbę załadowania i odtworzenia pliku multimedialnego wybranego przez użytkownika.
import javax.media.* ; importuj java.io.File ; import java.awt.* ; klasa publiczna TrivialJMFPlayer rozszerza ramkę { public static void main ( String [] args ) { try { Frame f = new TrivialJMFPlayer (); fa . paczka (); fa . setVisible ( prawda
); } catch ( Wyjątek e ) { mi . printStackTrace (); } } public TrivialJMFPlayer () zgłasza java . ja . IOException , java . netto . Zniekształcony URLException , javax . media . MediaException { FileDialog fd = nowy FileDialog ( this
, "TrivialJMFPlayer" , FileDialog . ŁADUJ ); fd . setVisible ( prawda ); Plik f = nowy plik ( fd . getDirectory (), fd . getFile ()); Gracz p = Menedżer . createRealizedPlayer ( f . toURI (). toURL ()); Składnik c =
str . getVisualComponent (); dodać ( c ); str . rozpocząć (); } }
Znaczna część przykładu jest związana z budowaniem GUI AWT. Tylko dwie linie dotykają JMF. Manager.createRealizedPlayer()
niejawnie tworzy DataSource
na podstawie adresu URL reprezentującego plik, tworzy Player
i realizuje to, co oznacza, że wszystkie zasoby niezbędne do odtwarzania są przydzielane i inicjalizowane. Funkcja getVisualComponent()
prosi odtwarzacz o
komponent
AWT odpowiedni do użycia w GUI. Gdyby potrzebny był komponent kontrolny, można by go uzyskać za pomocą getControlPanelComponent()
i dodany do GUI oddzielnie. Należy zauważyć, że programista nie jest zainteresowany formatem multimediów — ten kod działa równie dobrze dla każdego formatu multimediów, który JMF może importować i odczytywać.