JMF

10

Click here to load reader

Transcript of JMF

Page 1: JMF

1

Introducción a JMF

Jose Jesus García Rueda

(Extractado y adaptado dehttp://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.

Page 2: JMF

2

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:

Page 3: JMF

3

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.

Page 4: JMF

4

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 Playerpara que pase automáticamente por todos estos estados.

Page 5: JMF

5

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.

Page 6: JMF

6

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);

...

Page 7: JMF

7

Los eventos de reproducción (II)

� Ejemplo:

� Algunos eventos tipo ControllerEvent:– RealizeCompleteEvent.

– StartEvent.

– StopEvent.

– EndOfMediaEvent.

– DeallocateEvent.

public synchronized void controllerUpdate(ControllerEvent event) {

if (event instanceof TipoDeEvento){

...

} else if (event instanceof OtroTipoDeEvento){

...

}

...

Ejemplo: Un primer programa con

JMF

� Mi_Reproductor.java

Page 8: JMF

8

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 Processores un argumento de createProcessor()• Processor createProcessor (DataSourcedataSource)

• Procesor createProcessor (MediaLocatorsourceLocator)

• Processor createProcessor (java.net.URLsourceURL)

Page 9: JMF

9

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.

Page 10: JMF

10

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.