Anda di halaman 1dari 10

Introducción a JMF

Jose Jesus García Rueda


(Extractado y adaptado de
http://www.lcc.uma.es/~pinilla/TutorialJMF/Index.htm)

¿Qué es JMF?
 JMF (“Java Media Framework”) proporciona herramientas para
la captura, procesamiento y almacenamiento de datos
multimedia.
 Permite su transmisión y recepción a través de Internet.
 Más concretamente permite:
– Reproducir ficheros multimedia en applets y aplicaciones.
– Reproducir flujos multimedia recibidos en tiempo real a través de la
red.
– Capturar audio y vídeo de un micrófono y una cámara de vídeo.
 Provee codificadores y decodificadores para los formatos
multimedia más relevantes…
– …siendo capaz además, de realizar transcodificación entre dichos
formatos.

1
Arquitectura de JMF

 JMF funciona como una cadena de


música con su reproductor de CDs

Clases e interfaces de JMF

 Cualquier aplicación JMF puede ceñirse


al siguiente esquema:

2
DataSource
 En Java Media Framework los datos multimedia
pueden proceder de diversas fuentes:
– Archivos locales o remotos.
– Vídeo y audio en tiempo real o bajo demanda.
 Una fuente de datos multimedia se modela mediante
un objeto DataSource.
 Podemos crear una DataSource directamente a
través de una URL (Universal Resource Locator) o
bien mediante un objeto de tipo MediaLocator.
 Clase de javax.media.protocol
 Encapsula información sobre su ubicación, el
protocolo para su transferencia al reproductor y el
software para tratarlos.
 Soporta todo tipo de contenido multimedia.

Player
 Interface de javax.media
 Actúa como reproductor de datos multimedia.
 Asegura que lleguen adecuadamente al dispositivo de salida.
 No hace falta un Player específico para cada tipo de datos.

3
Creación de un Player
 Se emplea el método createPlayer() de la clase Manager.
 El flujo multimedia de entrada al Player constituye un parámetro
del método createPlayer()
– Player createPlayer (DataSource dataSource)
– Player createPlayer (MediaLocator sourceLocator)
– Player createPlayer (java.net.URL sourceURL)
 Ejemplo:
public void abrirContenidoMM(String cadenaContenidoMM) {
//Se crea URL para la cadena
URL url = new URL(cadenaContenidoMM);
//Se crea el reproductor
player = Manager.createPlayer(url);
...

(Se omiten captura de excepciones!)

Estados de un Player

– "Unrealized": El estado en el que se encuentra un player cuando es


creado por primera vez y no tiene ningún conocimiento acerca de
la fuente de datos de entrada.
– "Realized": Conoce el tipo de fuente de datos de entrada que habrá
de reproducir, y los recursos que va a necesitar.
– "Prefetched": Preparado para reproducir los datos multimedia de su
fuente de entrada.
– "Started": Comienza la reproducción.

 Normalmente bastará con invocar al método start() sobre el Player


para que pase automáticamente por todos estos estados.

4
Métodos de un Player
 start()  Inicia la reproducción.
 stop()  Detiene la reproduccion, descendiendo a estado
Prefetched.
 realize()  Hace al Player progresar al estado Realized
 prefetch()  Hace al Player progresar al estado Prefetched
 deallocate()  Aborta la actividad del Player y libera los
recursos consumidos por éste.
 setRate(float rate)  Establece la velocidad de reproducción
del contenido MM
 setMediaTime(Time time)  Indica a partir de donde
continuar/iniciar la reproducción.
 getVisualComponent()  Devuelve el componente visual de la
reproducción.
 getControlPanelComponent()  Devuelve el componente de
control de la reproducción.

La interfaz visual del Player (I)


 Un player tiene un componente visual y un componente de
control.

 Componente visual: permite reproducir la pista de vídeo del


contenido multimedia, si la hubiere.
– Para obtenerlo llamamos al método getVisualComponent().
– El componente visual devuelto ha de añadirse a la interfaz gráfica.

 Componente de control: permite al usuario controlar la


reproducción del contenido multimedia.
– Iniciar o detener la reproducción.
– Modificar el volumen del audio.
– Obtener infomación sobre el estado de la reproducción.
– Para obtenerlo llamamos al método getControlPanelComponent(),
añadiendo a continuación a nuestra interfaz el componente de
control devuelto.

5
La interfaz visual del Player (II)
 Ejemplo:

...
Component componenteControl = player.getControlPanelComponent();
Component componenteVisual = player.getVisualComponent();
//Se añade el componente de visualización y el de control a la UI
if (componenteVisual != null){
UI.addComponenteVisual(componenteVisual, this);
}
if (componenteControl != null) {
UI.addComponenteControl(componenteControl, this);
}
...

Los eventos de reproducción (I)


 El escuchador será un ControllerListener.
– Este escuchador deberá contener el método
controllerUpdate()

 Ejemplo:

...
player = Manager.createPlayer(url);
player.addControllerListener(listener1);
player.addControllerListener(listener2);
...

6
Los eventos de reproducción (II)
 Ejemplo:
public synchronized void controllerUpdate(ControllerEvent event) {
if (event instanceof TipoDeEvento){
...
} else if (event instanceof OtroTipoDeEvento){
...
}
...
 Algunos eventos tipo ControllerEvent:
– RealizeCompleteEvent.
– StartEvent.
– StopEvent.
– EndOfMediaEvent.
– DeallocateEvent.

Ejemplo: Un primer programa con


JMF
 Mi_Reproductor.java

7
Processor

 Es un tipo de Player, subinterfaz de


javax.media.Player
 Aporta dos características suplementarias:
– Puede volcar los datos procesados en un DataSource, en
lugar de en un dispositivo de salida.
– Puede cambiar de formato lo datos.

Creación de un Processor

 El método createManager() de la clase


Manager devuelve un Processor.
– El flujo multimedia de entrada al Processor
es un argumento de createProcessor()
• Processor createProcessor (DataSource
dataSource)
• Procesor createProcessor (MediaLocator
sourceLocator)
• Processor createProcessor (java.net.URL
sourceURL)

8
Processor (II)
 Un Processor tiene dos estados más que un Player:

DataSink

 Es una interfaz de javax.media


 Envía los datos a un destino distinto de
los dispositivos de salida, como un
fichero o un flujo de salida RTP.

9
Format
 Es una clase de javax.media
 Modela el formato de los datos multimedia.
 Tiene dos subclases:
– AudioFormat: Encapsula información sobre el
formato de datos de audio:
• Frecuencia de muestreo.
• Número de bits por muestra.
• Número de canales.
– VideoFormat: Encapsula información sobre el
formato de datos de vídeo.

Manager
 Es una clase Final de javax.media
 Contiene métodos estáticos para crear instancias de todas las
interfaces y clases anteriores.

10

Anda mungkin juga menyukai