Das JMF unterstützt unterschiedliche Formate, unter anderem auch MP3. Ebenso kann man auch eigene Stream-Ressourcen angeben, wie zum Beispiel eine Webcam. Da das JMF auch das Realtime Transport Protocol (RTP) unterstützt, können dann die jeweiligen Audio- oder Video-Streams über das Internet verbreitet werden. Die meisten Messenger, die heutzutage eingesetzt werden (Yahoo, MSN, ICQ, Skype), unterstützen auch die Videoübertragung der Webcam über das Internet. Da allerdings die meisten Programme, die Webcam unterstützen, in Programmiersprachen wie C++/C# oder anderen entwickelt wurden und diese direkt entweder auf den Treiber oder das jeweilige Betriebssystem-API zugreifen, ist die Webcam-Anbindung mittels JMF eine eher schwierige Aufgabe. Da Java plattformübergreifend ist und somit alle Anwendungen in der Java Virtual Machine (JVM) laufen, werden für Zugriffe auf die Hardware so genannte native Libraries benötigt.
Geschichte von JMF
Entwickelt wurde das Framework von Sun, Intel und Silicon Graphics. Mit Version 1 war es nur möglich, Daten abzuspielen. Dies änderte sich mit der Version 2. Die Weiterentwicklung wurde von den Firmen Sun und IBM durchgeführt. Version 2 enthält nun folgende erweiterte Fähigkeiten:
- Capturing
- Abspeichern der Daten
- Senden/Empfangen der Daten über ein Netzwerk (RTP)
Die letzten Änderungen am Framework erfolgten im November 2004, eine weitere Entwicklung bleibt abzuwarten. Mit der Entwicklung und Veröffentlichung (Dezember 2008) von JavaFX hat Sun seinen Schwerpunkt im Bereich Multimedia weg vom JMF und hin zu JavaFX Media, genauer den Java Media Components (JMC), die Teil von JavaFX sind, verschoben Wikipedia (JMF). Unter JMF Homepage gibt es eine Dokumentation, das JMF zum Herunterladen in unterschiedlichen Versionen und auch eine Kategorie „JMF in Action“, in der man sehen kann, was das JMF alles kann. Beispiele können unter http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/index eingesehen werden, u.a. auch zum Thema RTP Streaming mit JMF. Dieser Artikel zeigt, wie man eine Webcam einer Java-Anwendung zur Verfügung stellt.
Installation
Ausgehend von einem Windows-Betriebssystem lädt man sich am Anfang das Performance Pack für Windows herunter. Dabei ist zu beachten, dass die jeweilige Anwendung nur auf Windows-Rechnern läuft, die das Performance Pack installiert haben. Es gibt die Möglichkeit, die Cross-Plattform-Version zu benutzen, allerdings verwendet diese keine nativen Bibliotheken und unterstützt dementsprechend auch nicht alle Codecs bzw. Streams. Ebensowenig unterstützt das JMF keine 64-Bit-Systeme. Ist das Performance Pack installiert, kann man unter http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/jmfdiagnostics testen, ob die nativen Bibliotheken ordentlich installiert sind und für Java zur Verfügung stehen.
Das JMF installiert JMF Registry und JMF Studio mit. Im JMF Registry kann man seine Audio- und Videoquellen ansehen und welche Formate und Hardwareressourcen zur Verfügung stehen. Das JMF Studio ist ein kleiner Media Player, mit dem man das JMF testen kann; er unterstützt die Formate, die auch das JMF unterstützt, und auch das Realtime Transport Protocol (RTP). Um den Webcam Stream in das Java-Programm zu integrieren, kann man sich aus dem JMF Registry die Hardwareressource heraussuchen, in der Regel (vfw: NAME DES GERÄTS : 0) und sich dann im Java-Programm den MediaLocator, der die Verbindung zur Hardware darstellt, holen (Listing 1).
String cam = "vfw:Logitech USB Camera: 0";CaptureDeviceInfo info = CaptureDeviceManager.getDevice(cam);MediaLocator locator = info.getLOcator();
Nachdem nun der Locator der Webcam zur Vefügung steht, kann man einen Player erzeugen, der auch im JMF mitgeliefert wird. Diesem Player übergibt man dann den MediaLocator (Listing 2), sprich die Hardwareressource des jeweiligem Streams, in diesem Beispiel die Variable locator aus Listing 1.
Player player = null;try{player = Manager.createRealizedPlayer(locator);if(player != null) {player.start();Component comp;if ((comp = player.getVisualComponent()) != null){add(comp,BorderLayout.NORTH);}}else{Throw new NullPointerException(“Player is null”);}}catch (Exception e){e.printStackTrace();}}
Um etwas im jeweiligen Frame darstellen zu können, müssen noch die Actions entwickelt werden (Listing 3).
// Grab a frameFrameGrabbingControl fgc = (FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");buf = fgc.grabFrame();// Convert it to an imagebtoi = new BufferToImage((VideoFormat)buf.getFormat());img = btoi.createImage(buf);// show the imageimgpanel.setImage(img);
Jörg Jackisch ist Chief Programmer and Administrator for Information Systems, Ausbildungsleiter Fachinformatik/Instructing Manager Informatik bei der Firma Rolladen Schönberger GmbH & Co. KG Rolladenfabrik, Abt. JALOUSIESCOUT.




