Current Page: | Greybox » Authoring » Course ID: medieninformatik » Modules » Module ID: m06 » Learning Units » Unit ID: 3_01 |
---|---|
Last Modified: | Tuesday, 2015-05-05 - 08:09:01 |
Tools: | Validate — Preview XML Preview HTML Preview PDF |
Alternative: | Printable HTML |
Title: | Das Java Media Framework | ||
---|---|---|---|
Abstract: | In dieser LU werden die Grundlagen des Java Media Frameworks behandelt. Dazu zählen sowohl die Beschreibung der grundlegenden Architektur, des Datenverarbeitungsmodells, wie auch der wichtigsten Klassen. Außerdem wird in einem Beispiel gezeigt, wie ein einfacher Media Player mit Hilfe von JMF implementiert werden kann. | ||
Status: |
Review II: done |
Version: | 8.1 |
History: |
*Codeformatierungen siehe JMF LU1.doc - Done, please check and remove xIgnore. Könntest du bitte schaun, ob an den <applet> tags irgendwas falsch ist... bei mir werden die Applets nicht angezeigt (könnte aber auch an meinem Computer liegen). Neue jar files eingespielt und <param> tag geändert(bt). Acronyme done. Rechtschreibfehler done. Graphik JMF Architektur verkleinert. Sourcecode formatiert. |
Author 1: | Bernhard Tatzmann | E-Mail: | bernhard@isys.uni-klu.ac.at |
---|---|---|---|
Author 2: | (empty) | E-Mail: | (empty) |
Author 3: | (empty) | E-Mail: | (empty) |
Author 4: | (empty) | E-Mail: | (empty) |
Author 5: | (empty) | E-Mail: | (empty) |
Organization: | Universität Klagenfurt - Institut für Informatik-Systeme |
Einleitung1AutoDas Java Media Framework (JMF464):
Mittels JMF464 ist es möglich, Audio und Video Dateien in Java Anwendungen einzubinden. Derartige Anwendungen können Mediendateien
Taxonomie zeitbasierter Medien aus ED04 PCTaxonomie zeitbasierter Medien aus ED04 PDA_Phone2AutoDas Java Media Framework (JMF464) bietet die Möglichkeit, zeitbasierte Medien (Abb. 1 zeigt eine Taxonomie zeitbasierter Medien) in Java Anwendungen zu integrieren. Als Erweiterung der Java 2 Standard Edition kann die wichtigste Java Eigenschaft, nämlich die Plattformunabhängigkeit, auch für JMF464 gewährleistet werden. Taxonomie zeitbasierter Medien aus ED04 PCTaxonomie zeitbasierter Medien aus ED04 PDA_PhoneAutoJMF464 wurde ursprünglich von Sun, SGI und Intel entwickelt und erschien in seiner ersten Version 1998. Seit Version 2.1 wird JMF464 für die Betriebsysteme Windows, Solaris und Linux als Performance Pack (http://java.sun.com/products/java-media/jmf/ ) angeboten. Für nicht unterstützte Betreibsysteme wird der Java Source Code als Cross-platform Version zur Verfügung gestellt ED04. Mittels JMF464 ist es möglich, Audio und Video Dateien in Java Applikationen und Applets einzubinden. Neben dem Anzeigen können derartige Anwendungen Mediendateien
Architektur1Auto
JMF-Architektur AG04 PCJMF-Architektur AG04 PDA_Phone
2AutoDie Architektur von JMF464 gliedert sich in ein high-level (das Interface) und ein low-level API43 (siehe Abb. JMF464-Architektur). Das high-level API43 bietet eine Schnittstelle, auf die eine Java Applikation (ein Applet) zur Steuerung der obigen Funktionalitäten wie dem Anzeigen, Erfassen und Bearbeiten von Mediendaten zugreifen kann. Das low-level API43 erlaubt es, die vorhandene Funktionalität mittels Integration zusätzlicher Plug-Ins zu erweitern. Diese schichtweise Struktur ermöglicht es, zukünftige Medientechnologien in die gegeben Struktur einbetten zu können AG04. JMF-Architektur AG04 PCJMF-Architektur AG04 PDA_PhoneAllgemeines Datenverarbeitungsmodell1AllgemeinAllgemeines Verarbeitungsmodell für zeitbasierte Daten (siehe Abb. Verarbeitungsmodell für zeitbasierte Daten) besteht üblicherweise aus:
Auto PCAuto PDA_Phone
2AllgemeinEin Verarbeitungsmodell für zeitbasierte Daten besteht üblicherweise aus den folgenden drei Einheiten: Eingabe, Verarbeitung und Ausgabe (siehe Abb. Verarbeitungsmodell für zeitbasierte Daten). Auto PCAuto PDA_PhoneEingabeRepräsentiert das Medium, das als Eingabe für den Verarbeitungsprozess dient. Bsp.: VerarbeitungProzesse sind Operationen, die auf die Eingangsdaten angewendet werden. Hier kann es sich sowohl um die Anwendung von Filtern, um das Multiplexen oder Demultiplexen von Signalen oder auch um Dateikonvertierungsprozesse handeln. Durch das Anwenden eines weiteren Prozesses auf den Ausgang eines vorhergehenden Prozesses ist es möglich, Prozesse zu verketten. Bsp.: AusgabeRepräsentiert das Ziel des Datenverarbeitungsprozesses. Bsp.: Datenverarbeitungsmodell des JMF1AutoVorstellung der wichtigsten JMF464 Klassen wie DataSource , MediaLocator , Format , Player , Processor , DataSink etc. anhand des obigen Datenverarbeitungsmodell für Mediendaten. Eingabe
DataSource Klassenhierarchie AG04 PCDataSource Klassenhierarchie AG04 PDA_PhoneDatenformateDurch JMF464 unterstützte Audio-Dateiformate:
Video Dateiformate:
VerarbeitungAnwenden von Prozessen auf DataSource Objekte (Eingangsdaten bzw. Ausgang eines vorherigen Prozesses) durch Processor Objekte:
Zuordnung der einzelnen Verarbeitungsschritte zu jeder Spur mit TrackControl Interface:
Prozessorphasen AG04 PCProzessorphasen AG04 PDA_PhoneProzessorzustände
Prozessor Zustandsdiagramm AG04 PCProzessor Zustandsdiagramm AG04 PDA_PhoneAusgabeMöglichkeiten der Ausgabe:
Player
Player Zustände (durchläuft die meisten der Zustände, die auch der Processor durchläuft):
Player - Zustandsdiagramm AG04 PCPlayer - Zustandsdiagramm AG04 PDA_PhoneDataSinkAusgabe der Mediendaten in eine Datei durch DataSink Objekt möglich:
2AutoIn diesem Abschnitt werden die wichtigsten JMF464 Klassen wie DataSource , MediaLocator , Format , Player , Processor , DataSink etc. anhand des obigen Datenverarbeitungsmodell für Mediendaten vorgestellt. Es wird gezeigt, in welcher Phase welche Klassen zur Anwendung kommen. EingabeIn JMF464 werden Mediendaten mit Hilfe von DataSource Objekten (siehe Abb. DataSource Klassenhierarchie) übertragen, welche die Daten kapseln. Dies erlaubt eine Behandlung der Medien unabhängig von der Lage der Daten und vom verwendeten Protokoll. Zur Instantiierung von DataSource Objekten wird ein MediaLocator Objekt benötigt, das die Lage der Eingangsdaten angibt. Während URL Objekte nicht instanziiert werden können, wenn der entsprechende URLStreamHandler nicht im System installiert ist, ist dies bei MediaLocator Objekten sehr wohl möglich. Abgesehen davon entsprechen sie einander prinzipiell JS04. DataSource Klassenhierarchie AG04 PCDataSource Klassenhierarchie AG04 PDA_PhoneAutoWie in Abbildung DataSource Klassenhierarchie zu sehen ist gibt es zwei verschiedene Arten von DataSource Klassen: PullDataSource und PushDataSource .
DatenformateJMF464 unterstützt eine Vielzahl von Audio und Video Dateiformaten wie WAV465 (WAVeform sound format), MIDI30 (Music Instrument Digital Interface), Sun Audio , GSM436 (Global System for Mobile communications) bzw. MPEG31 -1 (Motion Pictures Expert Group), Quick Time, AVI466 (Audio Video Interleave) . Eine Auflistung aller zur Verfügung stehender Formate findet sich in der JMF464 Dokoumentation http://java.sun.com/products/java-media/jmf/2.1.1/formats.html. VerarbeitungDas Anwenden von Prozessen auf DataSource Objekte (Eingangsdaten bzw. Ausgang eines vorherigen Prozesses) wird in JMF464 mit Hilfe eines Objektes vom Typ Processor bewerkstelligt. Das Processor Interface leitet sich vom Interface Player ab, welches zum Rendern von Mediendaten verwendet wird und im nächsten Abschnitt (Ausgabe) im Detail beschrieben wird. Mittels Processor Objekten kann der Programmierer sowohl auf den Datenbearbeitungsvorgang (Processing), wie auch auf den Ausgabestrom (Output Stream) Einfluss nehmen. Das Vorgehen des Prozessors gliedert sich in die folgenden Phasen (siehe auch Abb. Prozessorphasen) AG04:
Das Zuordnen der einzelnen Verarbeitungsschritte zu jeder Spur geschieht in JMF464 mit Hilfe des TrackControl Interfaces, das folgende Methoden zur Verfügung stellt:
Somit können jeder Spur bestimmte Bearbeitungskomponenten zugeordnet werden, die den Plug-Ins in Abb. JMF464-Architektur entsprechen. Prozessorphasen AG04 PCProzessorphasen AG04 PDA_PhoneProzessorzuständeDie folgende Abbildung zeigt das Zustandsdiagramm des Prozessors. Da Processor von Player abgeleitet ist, entspricht es großteils dem Diagramm des Player Interfaces, das im nächsten Abschnitt beschrieben wird. Hier wird nur auf die zusätzlichen Zustände Configuring und Configured eingegangen, die zu Beginn des Kontrollflusses gleich nach dem Zustand Unrealized auftreten. Die weiteren Zustände entsprechen jenen des Players und werden in weiterer Folge im Abschnitt Player beschrieben. Vom Zustand Unrealized aus gelangt der Prozessor durch den Methodenaufruf Processor.configure() in den Zustand Configuring. Dort verweilt er solange, bis eine Verbindung zur DataSource besteht, das Demultiplexing durchgeführt wurde und das Eingabeformat bestimmt wurde. Danach wird das Transitionsevent ConfigureCompleteEvent ausgelöst und der Prozessor geht in den Zustand Configured über. Wird der Realized Zustand erreicht, so ist der Prozessor vollständig erzeugt. Prozessor Zustandsdiagramm AG04 PCProzessor Zustandsdiagramm AG04 PDA_PhoneAusgabeAm Ende des Mediendatenverarbeitungsmodells können die Daten entweder mittels des Player Interfaces abgespielt werden oder mit Hilfe des DataSink Interfaces in eine Datei geschrieben werden. PlayerDas Player Interface bietet Methoden zum Darstellen und Steuern von zeitbasierten Medien an. Um einen Player zu erzeugen, wird die Methode createPlayer(...) der Manager Factory verwendet. Als Parameter kann entweder eine DataSource , ein MediaLocator , ein URL oder eine DataSink übergeben werden. Der Typ der Eingangsdaten determiniert die Art der Darstellung. Da der Player auch auf eine DataSource angewendet werden kann, ist es möglich, den Player hinter einen Processor zu schalten, um so schon bearbeitete Daten darzustellen. Player ZuständeWie bereits im Abschnitt Verarbeitung erwähnt wurde, bildet Player die Basis-Klasse von Processor und durchläuft die meisten der Zustände, die auch der Processor durchläuft. Player - Zustandsdiagramm AG04 PCPlayer - Zustandsdiagramm AG04 PDA_PhoneAuto
DataSinkUm Mediendaten in eine Datei ausgeben zu können, muss ein DataSink Objekt erzeugt werden. Dies geschieht durch Verwendung der Manager Factory: Manager.createDataSink(javax.media.protocol.DataSource,javax.media.MediaLocator) Das zu übergebende DataSource Objekt gibt dabei die Quelle der Daten an und das MediaLocator Objekt das Ziel. Beispiele MediaPlayer1MediaPlayer
Media Player Appletpublic void init() { try { player = Manager.createRealizedPlayer(new URL( getParameter("url"))); } catch (Exception e) { ; } setLayout(new BorderLayout()); add(player.getVisualComponent(), BorderLayout.CENTER); add(player.getControlPanelComponent(), BorderLayout.SOUTH); } JMF Media Player
Verwendung des AppletsDas Applet bietet die Möglichkeit der Betrachtung einer über die Appletparameter definierten Mediendatei. Zum Betrachten des Applets ist eine lokale Installation des Java Media Frameworks(http://java.sun.com/products/java-media/jmf/2.1.1/download.html) nötig. Beispiel MediaPlayer mit eigenen Kontrollkomponenten
Media Player Applet mit eigenen Kontrollkomponentenpublic void init() { try { player = Manager.createRealizedPlayer(new URL( getParameter("url"))); } catch (Exception e) { ; } setLayout(new BorderLayout()); JPanel control_panel = new JPanel(); add(control_panel, BorderLayout.SOUTH); start_button = new JButton(CMD_START); stop_button = new JButton(CMD_STOP); control_panel.add(start_button); start_button.addActionListener(this); control_panel.add(stop_button); stop_button.addActionListener(this); add(player.getVisualComponent(), BorderLayout.CENTER); } public void actionPerformed(ActionEvent e) { if(e.getActionCommand() == CMD_START) { player.start(); start_button.setText(CMD_PAUSE); System.out.println("Player gestartet bei Zeitindex "+player.getMediaTime().getSeconds()); return; } if(e.getActionCommand() == CMD_PAUSE) { player.stop(); start_button.setText(CMD_START); System.out.println("Player unterbrochen bei Zeitindex "+player.getMediaTime().getSeconds()); return; } if(e.getActionCommand() == CMD_STOP) { player.stop(); //Zurücksetzen des Players an den Anfang player.setMediaTime(new Time(0.0)); start_button.setText(CMD_START); System.out.println("Player angehalten bei Zeitindex "+player.getMediaTime().getSeconds()); return; } } JMF Media Player mit eigenen Kontrollkomponenten
Verwendung des AppletsDas Applet bietet die Möglichkeit der Betrachtung einer über die Appletparameter definierten Mediendatei. Zum Betrachten des Applets ist eine lokale Installation des Java Media Frameworks(http://java.sun.com/products/java-media/jmf/2.1.1/download.html) nötig. 2MediaPlayerZum Abschluss wird mit einem einfachen Beispiel gezeigt wie mit Hilfe eines Java Applets ein beliebiges Medienfile abgespielt werden kann. Die Quell-URL289 des Files wird dem Applet dabei als Parameter übergeben. Media Player Appletimport javax.media.*; import java.awt.*; import java.applet.*; import java.net.URL; public class MyMediaPlayer extends Applet { private Player player = null; public void init() { try { player = Manager.createRealizedPlayer(new URL( getParameter("url"))); } catch (Exception e) { ; } setLayout(new BorderLayout()); add(player.getVisualComponent(), BorderLayout.CENTER); add(player.getControlPanelComponent(), BorderLayout.SOUTH); } public void processEvent(AWTEvent e) { if (e.getID() == Event.WINDOW_DESTROY) { player.stop(); System.exit(0); } } public static void main(String args[]) { Frame f = new Frame("MyMediaPlayer"); MyMediaPlayer MyMediaPlayer = new MyMediaPlayer(); MyMediaPlayer.init(); MyMediaPlayer.start(); f.add("Center", MyMediaPlayer); f.setSize(400, 300); f.show(); } } JMF Media Player
Verwendung des AppletsDas Applet bietet die Möglichkeit der Betrachtung einer über die Appletparameter definierten Mediendatei. Zum Betrachten des Applets ist eine lokale Installation des Java Media Frameworks(http://java.sun.com/products/java-media/jmf/2.1.1/download.html) nötig. AutoZuerst wird mittels Manager Factory, und der übergebenen URL als Parameter, ein Player Objekt generiert. Da der Player bereits im Zustand Realized von der Factory geliefert wird, sind keine weiteren Initialisierungsschritte nötig. Das graphische Benutzerinterface des Applets wird mit Hilfe der visuellen Darstellungskomponente und der Steuerungskomponente des Players erzeugt. Diese beiden Komponenten lassen sich mit Hilfe der Methoden Player.getVisualComponent() und Player.getControlComponent() erzeugen. Beispiel Media Player mit eigenen KontrollkomponentenIm obigen Beispiel wurden zur Steuerung des Players die JMF464-eigenen Kontrollkomponenten verwendet. Hier soll nun gezeigt werden, wie die Steuerung mittels eigener GUI Komponenten erfolgen kann. Media Player Applet mit eigenen Kontrollkomponentenimport javax.media.*; import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.applet.*; import java.net.URL; public class MyMediaPlayer2 extends Applet implements ActionListener { private Player player = null; private JButton start_button; private JButton stop_button; final static String CMD_START = "Play"; final static String CMD_PAUSE = "||"; final static String CMD_STOP = "Stop"; public void init() { try { player = Manager.createRealizedPlayer(new URL( getParameter("url"))); } catch (Exception e) { ; } setLayout(new BorderLayout()); JPanel control_panel = new JPanel(); add(control_panel, BorderLayout.SOUTH); start_button = new JButton(CMD_START); stop_button = new JButton(CMD_STOP); control_panel.add(start_button); start_button.addActionListener(this); control_panel.add(stop_button); stop_button.addActionListener(this); add(player.getVisualComponent(), BorderLayout.CENTER); } public void processEvent(AWTEvent e) { if (e.getID() == Event.WINDOW_DESTROY) { player.stop(); System.exit(0); } } public void actionPerformed(ActionEvent e) { if(e.getActionCommand() == CMD_START) { player.start(); start_button.setText(CMD_PAUSE); return; } if(e.getActionCommand() == CMD_PAUSE) { player.stop(); start_button.setText(CMD_START); return; } if(e.getActionCommand() == CMD_STOP) { player.stop(); //Zurücksetzen des Players an den Anfang player.setMediaTime(new Time(0.0)); start_button.setText(CMD_START); return; } } public static void main(String args[]) { Frame f = new Frame("MyMediaPlayer"); MyMediaPlayer2 media_player = new MyMediaPlayer2(); media_player.init(); media_player.start(); f.add("Center", media_player); f.setSize(400, 310); f.pack(); } } JMF Media Player mit eigenen Kontrollkomponenten
Verwendung des AppletsDas Applet bietet die Möglichkeit der Betrachtung einer über die Appletparameter definierten Mediendatei. Zum Betrachten des Applets ist eine lokale Installation des Java Media Frameworks(http://java.sun.com/products/java-media/jmf/2.1.1/download.html) nötig. AutoDie Generierung des Players erfolgt wieder gleich wie im obigen Beispiel. Zur Steuerung des Players werden zwei JButton Objekte verwendet, die den Player mit Hilfe der Methoden start(), stop() und setMediaTime() ansteuern. Um die gewohnten Steuerungsmöglichkeiten von anderen Media Playern zu erzeugen, wechselt die Funktionalität des zweiten Schalters zwischen Play und Pause (||) bei jedem Klick. Bibliographie2AutoAG04 ED04 JS04 |
(empty) |