JMF - JAVA MEDIA FRAMEWORK JMF è un insieme di API che fornisce gli strumenti per la realizzazione di oggetti multimediali in Java , per la riproduzione audio e video. I suoi elementi principali sono: Il Data Source rappresenta l’input del player: si crea a partire da oggetti tipo Url o MedialLocator e gestisce oggetti di tipo SourceStream Il Capture Device permette di acquisire il flusso di dati. Innanzitutto bisogna interrogare CaptureDeviceManager per localizzare il dispositivo. Si ottiene un CaptureDeviceInfo per fornire le info necessarie al riconoscimento del dispositivo ed un MediaLocator() dal CaptureDeviceInfo per creare un DataSource . A partire da quel Datasource infine si crea il Player. Il Player riceve un input stream e lo manda in output senza effettuare alcun controllo sulle operazioni che esegue prima di inviare i dati. Il Processor (che insieme al Player costituisce i Controllers) è un player avanzato (Processor extends Player); ha 2 stati (Configuring e Configured) in più del Player che gli permettono di fare il Multi/Demultiplexing automatico di un input stream contenente più tracce, o codificare/decodificare una traccia. DataSink è usato essenzialmente per inviare il flusso di dati (media stream) verso un file-writer. Format rappresenta il fomato in cui sono stati memorizzati i dati multimediali (encoding usato). Un JMF Manager è una specie di robot che realizza implementazioni di interfacce chiave(quali Player, Processor, ma anche registri di codec o plug-in disponibili) che possono essere usate con le altri classi senza creare conflitti! I JMF Manager sono 4: – Manager : gestisce la costruzione di Players, Processors, DataSources e DataSinks – PackageManager : crea e tiene aggiornato un registro dei package che contengono classi JMF – CaptureDeviceManager : crea e tiene aggiornato un registro degli dispositivi di cattura audio video disponibili – PlugInManager : crea e tiene aggiornato un registro di JMF componenti di tipo plug-in disponibili per un processor. author: Giulio De Meo L’ applicazione “ MultiMediaPlayer.java ” La versione delle API che ho utilizzato per la creazione del player multimediale, è la JMF 2.1 che permette di riprodurre suoni nei formati MP3, WAV, AU,e MIDI e video nei formati MPEG1,MPEG-2, Quicktime ed AVI. MultiMediaPlayer.java realizza un player multimediale in grado di leggere un determinato file audio o video e riprodurlo in maniera appropriata . Se il file è di tipo audio, e se nella sua stessa cartella è presente il testo della canzone, selezionando la voce “Testo” dal menu “File” è possibile leggere il testo della canzone in una finestra video. Dal file letto, si ottiene l'URL che ci permette di creare il player. Per ottenere un player da un oggetto URL basta utilizzare la seguente istruzione: Player player=Manager.createPlayer(url); Esiste, infatti, la classe Manager che, attraverso i suoi metodi static, che permette la creazione del player a partire dal suo URL (nel caso specifico si usa il metodo createPlayer()). A questo punto il manager esamina l'URL e crea il player opportuno. Successivamente il metodo realize() procede alla fase di Realizing. La generazione di un evento di tipo RealizeCompleteEvent, ci dice che la fase di Realizing è terminata e che il player è nello stato di Realized. Esso si è "reso conto" di quello che deve fare e attende che gli venga dato il via per procedere. Ovviamente, per sentire l'evento, bisogna registrarsi ad esso attraverso una istruzione del tipo player.addControllerListener(this); Attraverso l'implementazione della precedente interfaccia è possibile controllare lo stato del player in ogni istante attraverso l'ascolto di numerosi eventi che rappresentano la maggior parte delle classi del package java.media. Bisogna cioè definire il metodo public synchronized void controllerUpdate(ControllerEvent ce) esaminando l'oggetto ControllerEvent passato come parametro. Un volta nello stato Realized, notificato dal fatto che è stato generato un evento del tipo realizeCompleteEvent, si possono prelevare quelli che saranno i componenti caratteristici il media, utilizzando due particolari metodi dell'interfaccia Player: * getVisualComponent() : per ottenere il visual-component * getControlPanelComponent(): per ottenere il Panel con gli strumenti di controllo del flusso del player. Gli oggetti ritornati dai metodi precedenti sono oggetti Component da inserire nel nostro Frame principale utilizzando un layout di Java, nel nostro caso il BorderLayout. Si pone il VisualComponent a "Center" ed il Control-Panel a "South". A questo punto il lettore multimediale si può considerare concluso. Abbiamo dotato la piccola application anche delle normali funzioni di caricamento. L’opzione chiusura permette il rilascio delle risorse. . 2 author: Giulio De Meo L’interfaccia grafica del MultiMedia Player durante la riproduzione di un file mp3 è in fig1.: N.B. Affinchè sia possibile utilizzare l’applicazione “PLAYER”, è necessario installare sul proprio computer i seguenti file dal sito SUN http://java.sun.com/j2se/1.5.0/download.jsp; - JRE 1.5 ; - jmf 2.1 . il file zippato jmf-2_0-spec contiene la documentazione delle API jmf., quindi non è necessario alla corretta esecuzione del player. 3