JMF
Click here to load reader
-
Upload
gabriel-farfan-molina -
Category
Documents
-
view
141 -
download
0
Transcript of 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.
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:
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.
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.
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.
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);
...
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
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)
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.
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.