¿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
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);
...
Estados de un Player
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.
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);
}
...
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.
7
Processor
Creación de un Processor
8
Processor (II)
Un Processor tiene dos estados más que un Player:
DataSink
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