Java Media Framework ( JMF ) es una biblioteca Java que permite añadir audio, vídeo y otros contenidos multimedia a aplicaciones y applets Java. Este paquete opcional, que puede capturar, reproducir, transmitir y transcodificar múltiples formatos multimedia , amplía la plataforma Java Standard Edition (Java SE) y permite el desarrollo de aplicaciones multimedia multiplataforma.
Versiones y licencias
Una versión inicial de JMF, solo para reproducción, fue desarrollada por Sun Microsystems , Silicon Graphics e Intel y lanzada como JMF 1.0 en 1997. JMF 2.0, desarrollada por Sun e IBM , salió en 1999 y añadió captura, transmisión, códecs conectables y transcodificación. JMF se comercializa como parte de la tecnología "Desktop" de Sun, J2SE, en contraposición a los marcos de aplicaciones Java del lado del servidor y del lado del cliente. Las excepciones notables son los applets de Java y Java Web Start , que tienen acceso a la versión completa de JMF en el JRE subyacente del navegador web o del visor de applets. [ 1 ] [ 2 ]
JMF 2.0 originalmente incluía un decodificador y un codificador de MP3. Estos se eliminaron en 2002, y en 2004 se publicó un nuevo complemento solo para la reproducción de MP3.
Los binarios de JMF están disponibles bajo una licencia personalizada, y el código fuente está disponible bajo la licencia SCSL .
La versión actual incluye cuatro archivos JAR y scripts de shell para ejecutar cuatro aplicaciones basadas en JMF:
- JMStudio : una interfaz gráfica de usuario sencilla para reproductores.
- JMFRegistry : una interfaz gráfica de usuario para administrar el "registro" de JMF, que gestiona las preferencias, los complementos, etc.
- JMFCustomizer : se utiliza para crear un archivo JAR que contiene solo las clases necesarias para una aplicación JMF específica, lo que permite a los desarrolladores distribuir una aplicación más pequeña.
- JMFInit
JMF está disponible en una versión totalmente Java y como "paquetes de rendimiento" específicos para cada plataforma, que pueden contener reproductores de código nativo para la plataforma y/o integraciones con un motor multimedia específico para dicha plataforma. JMF 2.0 ofrece paquetes de rendimiento para Linux, Solaris (en SPARC) y Windows. [ 1 ]
En enero de 2011, Tudor Holton del Proyecto Bentokit publicó un paquete Debian para JMF con el fin de aliviar las dificultades que habían surgido con el tiempo al instalar JMF en Debian y Ubuntu Linux. Este paquete no contiene JMF, sino que presenta al usuario la licencia de JMF, la descarga del sitio web de Oracle y luego la instala. [ 3 ] En febrero de 2011 también se creó un instalador de paquete Debian similar para el complemento JMF MP3. [ 4 ]
Conceptos de diseño
JMF abstrae los medios con los que trabaja en DataSourcearchivos (para los medios que se leen en JMF) y DataSinkarchivos (para los datos que se exportan). No proporciona al desarrollador un acceso significativo a los detalles de ningún formato en particular; más bien, los medios se representan como fuentes (obtenidas a su vez de URL) que se pueden leer, reproducir, procesar y exportar (aunque no todos los códecs admiten el procesamiento y la transcodificación).
Una Managerclase ofrece métodos estáticos que constituyen el principal punto de contacto con JMF para las aplicaciones.
Críticas y alternativas
Muchos desarrolladores de JMF se han quejado de que la implementación de JMF proporcionada en las JRE actualizadas admite relativamente pocos códecs y formatos actualizados. Su versión completamente en Java, por ejemplo, no puede reproducir MPEG-2 , MPEG-4 , Windows Media , RealMedia , la mayoría de las películas de QuickTime , contenido Flash posterior a Flash 2, y necesita un complemento para reproducir el omnipresente formato MP3 . [ 5 ] Si bien los paquetes de rendimiento ofrecen la capacidad de usar la biblioteca multimedia de la plataforma nativa, solo se ofrecen para Linux, Solaris y Windows. En particular, los desarrolladores de JMF basados en MS Windows que son nuevos en JMF a menudo esperan compatibilidad con algunos formatos más recientes en todas las plataformas cuando, de hecho, dichos formatos solo son compatibles con MS Windows.
Aunque JMF se considera un marco de trabajo muy útil, la implementación gratuita proporcionada por Oracle adolece de falta de actualizaciones y mantenimiento. Oracle no dedica mucho esfuerzo al mantenimiento de JMF; la API no se ha mejorado desde 1999, y la última noticia en la página principal de JMF se publicó en septiembre de 2008. Si bien JMF está diseñado para ser extensible, existen pocas extensiones de terceros. Además, la funcionalidad de edición de contenido en JMF es prácticamente inexistente. Se pueden realizar grabaciones y reproducciones sencillas de audio y vídeo, pero la implementación proporcionada por Oracle ofrece pocas funciones adicionales. [ 6 ]
Las plataformas que van más allá de aquellas para las que Oracle brinda soporte quedan a cargo de sus respectivos proveedores de JRE. [ 7 ] Si bien Sun aún proporciona un foro para la discusión de su implementación, ha habido varios esfuerzos para implementar alternativas de código abierto. [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ]
Alternativas
Dependiendo de las necesidades del desarrollador, otras bibliotecas pueden ser más adecuadas que JMF. Estas incluyen:
- Freedom for Media in Java (FMJ): una alternativa de código abierto compatible con la API de JMF.
- QuickTime para Java
- Kit de herramientas de IBM para MPEG-4
- Jffmpeg
- vlcj
- gstreamer-java
- Cortado , un reproductor completo para Ogg Vorbis y Theora en un applet de Java.
- Envoltorio Java para DirectShow
- Biblioteca MP3 de JLayer
- Video4Linux4Java
- Analizador de MP4 para Java Analizador de MP4 para Java
Ejemplo de código
El siguiente ejemplo muestra un cuadro de diálogo de selección de archivos AWT e intenta cargar y reproducir el archivo multimedia seleccionado por el usuario.
paquete org.wikipedia.examples ;import java.awt.Component ; import java.awt.FileDialog ; import java.awt.Frame ; import java.io.File ; import java.io.IOException ; import java.net.MalformedURLException ;import javax.media.Manager ; import javax.media.Player ; import javax.media.MediaException ;public class TrivialJMFPlayer extends Frame { public TrivialJMFPlayer () throws IOException , MalformedURLException , MediaException { FileDialog fd = new FileDialog ( this , "TrivialJMFPlayer" , FileDialog . LOAD ); fd . setVisible ( true ); File f = new File ( fd . getDirectory (), fd . getFile ()); Player p = Manager . createRealizedPlayer ( f . toURI (). toURL ()); Component c = p . getVisualComponent (); add ( c ); p . start (); }public static void main ( String [] args ) { try { Frame f = new TrivialJMFPlayer (); f . pack (); f . setVisible ( true ); } catch ( Exception e ) { e . printStackTrace (); } } }Gran parte del ejemplo se centra en la construcción de la interfaz gráfica de usuario (GUI) de AWT. Solo dos líneas afectan a JMF. Manager.createRealizedPlayer()Crea implícitamente un objeto DataSourcea partir de una representación URL del archivo, crea un objeto Playery lo realiza , lo que significa que se asignan e inicializan todos los recursos necesarios para la reproducción. El getVisualComponent()objeto solicita a la interfaz gráfica de usuario Playerun objeto AWT Componentadecuado para su uso en una GUI. Si se deseara un componente de control, se obtendría con getControlPanelComponent()y se añadiría a la GUI por separado. Cabe destacar que al desarrollador no le preocupa el formato del medio; este código funciona igualmente bien para cualquier formato de medio que JMF pueda importar y leer.
Referencias
- 1 2 Preguntas frecuentes de JMF
- ↑ API de Java Media Framework
- ↑ «Instalador de Ubuntu para JMF» . Plataforma de lanzamiento . 5 de enero de 2011 . Consultado el 4 de marzo de 2011 .
- ↑ "Instalador de complementos JMF para Debian" . 23 de febrero de 2011. Consultado el 4 de marzo de 2011 .
- ↑ JMF 2.1.1 - Formatos compatibles
- ↑ JMF: Un error que pide ser corregido, por Chris Adamson, 13 de diciembre de 2005
- ↑ Instrucciones de instalación de JMF en Mac OS X
- ↑ JMF-Interest, la lista de discusión oficial. Archivada el 27/04/2006 en Wayback Machine.
- ↑ Jffmpeg: Un complemento de código abierto para JMF que admite códecs adicionales
- ↑ Fobs4JMF: Otro plugin de código abierto para JMF que admite códecs adicionales
- ↑ FMJ: Un reemplazo/alternativa/implementación de código abierto para JMF
- ↑ Xuggler : Un complemento Java de código abierto que admite códecs adicionales y se mantiene actualizado automáticamente con FFMPEG.
- API de Java
- Marcos multimedia