# Java Media Framework

Java Media Framework o JMF (en español: «entorno de trabajo multimedia de Java») es una librería de Java desarrollada por Sun Microsystems para facilitar el desarrollo de aplicaciones multimedia en este lenguaje de programación.

## Descripción

JMF no se incluye en la JDK, ni en la JRE, sino que debe conseguirse como un paquete externo.

### Funcionalidad

A partir de la versión 2.1.1, JMF incluye la siguiente funcionalidad:
* Reproducción de formatos de audio: AU, AVI, MIDI, MPEG, WAV
* Reproducción de formatos de vídeo: Quicktime, MPEG
* Captura de audio y vídeo mediante micrófono o videocámara
* Almacenamiento de los datos en los formatos soportados
* Streaming y emisión multimedia vía Internet
* Procesamiento de información multimedia (aplicación de filtros, compresión/descompresión, conversión entre formatos)

### Características

Entre sus principales características cabe destacar:
* Estabilidad, al operar sobre la máquina virtual Java (JVM)
* Sencillez, ya que permite realizar complejas tareas multimedia con unos pocos comandos
* Potencia, permitiendo la manipulación de elementos multimedia de audio y vídeo, así como su retransmisión en tiempo real a través de la red, merced al protocolo RTP.

### Componentes

* DataSource (fuente de datos): Es el mecanismo que encapsula los elementos de audio y video, su ubicación física y el protocolo necesario para manipularlos. Se trata de una fuente audiovisual que, una vez creada, puede ser reproducida por un objeto Player.
* Capture device (dispositivo de captura): Hace referencia a cualquier dispositivo de entrada que maneje audio o vídeo, como por ej. un micrófono o una cámara web.
* Player (reproductor): Es un mecanismo capaz de renderizar un stream de audio o vídeo para que pueda ser reproducido en un dispositivo de salida, como un altavoz o una pantalla. Player representa un objeto interfaz con distintas implementaciones para reproducir distintos formatos.
* Processor (procesador): Es un tipo de Reproductor (objeto Player) con unas características especiales. En la API de JMF, el objeto Processor extiende la interfaz Player, pero además incluye capacidades de control de los datos multimedia con objeto de poder editarlos, no solo reproducirlos. De esta forma, puede escribir los datos precargados en otro objeto Data source, que a su vez puede ser reproducido o recodificado en otro formato.
* DataSink (sumidero de datos): Es un objeto interfaz usado por JMF para procurar un acceso uniforme a todos los objetos que leen información multimedia procedente de una fuente de datos. Un ejemplo sería un objeto que quisiese escribir un stream multimedia en un fichero.
* Format (formateador): Es un objeto que contiene los datos referentes al formato de un elemento multimedia, ya sea de audio o vídeo.
* Manager (gestor): Es el objeto encargado de coordinar las tareas implicadas en el tratamiento de la información multimedia. Actúa de interfaz para la creación e interacción entre objetos de tipo Player, Processor, DataSource y DataSink.

## Otras aplicaciones de JMF

La suite JMF incorpora varias aplicaciones, entre las cuales se encuentran:
* JMFCustomizer: La configuración de JMF reside íntegramente en un único fichero (jmf.properties), localizado en el directorio lib junto a los ficheros JAR de la aplicación. Este fichero contiene una serie de opciones para JMF y no puede ser editado directamente, sino haciendo uso de la herramienta JMFCustomizer. Mediante esta aplicación se pueden configurar, entre otras cosas, los codificadores (encoders) usados en los formatos y los protocolos a utilizar.
* JMFRegistry: El archivo de configuración jmf.properties también incluye un registro de los plugins disponibles y un conjunto de parámetros asociados, preferencias que pueden gestionarse mediante la aplicación JMFRegistry.
* JMFStudio: Se trata de una miniaplicación de ejemplo que muestra todas las herramientas básicas ofrecidas por la versión de JMF. Proporciona capacidades de reproducción, grabación, transmisión y codificación de datos multimedia. Como las anteriores, está basada en Swing y se halla incluida dentro del fichero jmf.jar.