Java Media Framework API Theoretischer Hintergrund und Anwendungen von Daniel Birk Themenübersicht Java Media Framework (JMF) API Architektur des JMF API Wiedergabe/Presentation zeitbasierter Medien Bearbeitung/Processing zeitbasierter Medien Aufnahme/Capturing zeitbasierter Medien Echtzeitfunktionalität des JMF API Aufbau und Einordnung des Real-Time Transport Protocol (RTP) Senden von Streaming-Media Empfangen von Streaming-Media Anwendungen Java Media Framework API Architektur des JMF API Daten importieren, ver- bearbeiten, exportieren Zeit-, Event- und Datenmodell 3 Manager Klassen Abbildung aus JMF API Guide von sun Java Media Framework API Wiedergabe zeitbasierter Medien Klasse Player Events entsprechend Status des Players player = Manager.createPlayer(p), .createRealizedPlayer(p) Wichtig: RealizeCompleteEvent Kontroll- und Steuerelemente Control[] controls = player.getControls(); Steuereinheit Visuelle Komponente Lautstärkeregler Dateiinformation Java Media Framework API Konfigurationsphasen von Player und Processor Abbildung aus JMF API Guide von sun Java Media Framework API Bearbeitung zeitbasierter Medien Klasse Processor Alle Tracks einer Datei TrackControl[] tc = proc.getTrackControls() Format, Kodierung und Darstellung festlegen proc = Manager.createProcessor(p) tc[1].setFormat(f), .setCodecChain(c), .setRenderer(r) Dateiformat bestimmen proc.setContentDescriptor(contenDescriptor) Unterklasse von ContentDescriptor ist FileTypeDescriptor Java Media Framework API Aufnahme zeitbasierter Medien Klasse CaptureDeviceInfo cdi = CaptureDeviceManager.getDevice(„deviceName“); Processor erzeugen mit dynamischen Einstellungen und Manager.createProcessor(p) proc.setSource(cdi_source); proc.setContentDescriptor(contentDesc); proc.realize(); Datei schreiben Datenquelle erzeugen op = processor.getDataOutput() Zieldatei angeben ml = new MediaLoacator(„file://demo.wav“) Datensenke kreieren Manager.createDataSink(op, ml) Echtzeitfunktionalität des JMF API Aufbau und Einordnung des RTP Real-Time Transport Protocol (RTP) Ende-zu-Ende Verbindung Übertragung in Echtzeit setzt meist auf UDP auf Real-Time Control Protocol (RTCP) Identifizierung u. Überwachung der Datenströme Quality-of-Service Funktionalität Real-Time Media Framework and Applications Real-Time Control Protocol (RTCP) Real-Time Transport Protocol (RTP) Other Network Transport Protocols (TCP, ATM, ST-II, etc) UDP Internet Protocol (IP) Abbildung aus JMF API Guide von sun Echtzeitfunktionalität des JMF API Senden von Streaming-Media Übertragung mittels Processor und Sitzungen DataSource, die zu übertragende Datei; Manager.createDataSource(url) MediaLocator spezifiziert Empfänger rtp://192.168.0.1:49150/audio DataSink, Repräsentator des Empfängers, Übertragung Processor mit ProcessorModel nur erster erkannter Stream einer Datei kann übertragen werden Manager.createRealizedProcessor(ProcessorModel pm) Processor mit SessionManager Übertragung mehrerer Streams sm.createSendStream(output, x); x: index des Streams oder mixed Echtzeitfunktionalität des JMF API Senden von Streaming-Media Videodatei Bild TrackControl[] getTrackControls() tcBild tcTon Ton setFormat() setEnabled(true) tcBild tcTon x=1 tcBild tcBild realize() tcTon createSendStream(output, x) Single RTPStream x=0 tcTon tcBild Processor Mixed RTPStream Echtzeitfunktionalität des JMF API Empfangen von Streaming-Media Wiedergabe eines Streams MediaLocator, analog zum Sender, rtp://192.168.0.1:49150/audio Erzeugen des Players, Manager.createRealizedPlayer(ml) Wiedergabe aller Streams mittels SessionManager NewReceiveStreamEvent bei jedem eingehenden Stream Erzeugen eines Players bei jedem Event Abbildung aus JMF API Guide von sun Anwendungen Java Media Framework Abspielen von Audio und Video Konvertierung/Kompression Aufnahme von WAVE mit Mikrophon Fazit und Quellen API Guide von sun: sehr gut, aber alt Einleuchtende, intuitive Programmierung JMF API Guide v. 2.0 von sun (1999) Entwicklerbereich der IBM Website https://www6.software.ibm.com/developerworks/education/j-jmf/index.html API Dokumentation