Articulo de referencia

QuickTime para Java

QuickTime para Java o QTJ es una biblioteca de software que permite que el software escrito en el lenguaje de programación Java ofrezca funcionalidades multimedia mediante llama...

QuickTime para Java o QTJ es una biblioteca de software que permite que el software escrito en el lenguaje de programación Java ofrezca funcionalidades multimedia mediante llamadas a la biblioteca nativa de QuickTime . En la práctica, permite que las aplicaciones Java en Mac OS , Mac OS X y Microsoft Windows admitan la captura, edición, reproducción y exportación de diversos formatos y códecs multimedia .

Apple ha declarado obsoleto QTJ. [ 1 ]

Historia

Owen W. Linzmayer, en Apple Confidential 2.0 , rastreó el origen de QuickTime para Java hasta Kaleida Labs , una empresa derivada creada por Apple Computer e IBM , señalando que este y algunas clases de texto Unicode fueron el único software para Mac rescatado del desastre de cuatro años y 150 millones de dólares. [ 2 ] Adaptado a Mac OS, se desarrolló bajo el nombre en clave "Biscotti" y se lanzó por primera vez como una versión beta pública en 1999. Las versiones posteriores se instalaron por defecto con Mac OS y Mac OS X, y eran una parte opcional de la instalación de QuickTime para Windows.

QTJ 6.1

En 2003, Apple lanzó una implementación de Java 1.4.1 que dejó inutilizables las aplicaciones QTJ que intentaban ejecutarse con dicha versión en Mac OS X. El problema subyacente radicaba en el cambio de Apple de Carbon a Cocoa para su implementación de AWT y en la eliminación de una biblioteca de conversión de Java a código nativo llamada "JDirect", de la que dependía QTJ. Las aplicaciones QTJ aún podían ejecutarse con Java 1.3.1, pero aquellas que no especificaban la versión de Java requerida o que necesitaban las características de la versión 1.4 quedaban inutilizables.

Más adelante, en 2003, Apple lanzó una nueva versión de QTJ que solucionaba las incompatibilidades, ofreciendo una versión compatible pero reducida de las clases de la interfaz gráfica de usuario (GUI). Esta versión 6.1 de QTJ también cambió radicalmente la API, de modo que en lugar de que los desarrolladores crearan componentes de la GUI y Movieles asociaran objetos renderizables, ahora debían comenzar con la interfaz Moviey solicitar un componente adecuado a una fábrica. La nueva versión tampoco proporcionó un componente para mostrar una vista previa visual de la entrada de un dispositivo de captura, como una cámara web o una videocámara . [ 3 ]

Diseño

QTJ coloca una API orientada a objetos sobre la biblioteca nativa QuickTime basada en C. Lo hace asociando structobjetos comunes y las funciones que trabajan con ellos en clases. Por ejemplo, la Movieestructura es la base de la clase quicktime.std.movies.Movie, con funciones como NewMovieFromFiley GetMovieTrackCountconvirtiéndose en los métodos de instancia fromFile()y getTrackCount()respectivamente. El resultado se asemeja más a una API genuinamente orientada a objetos que otras adaptaciones de C a Java (como JOGL , que vuelca los archivos de encabezado de OpenGL en clases con miles de métodos estáticos). [ 4 ]

QTKit , basado en Cocoa, es un intento similar de colocar una capa orientada a objetos sobre la biblioteca procedimental QuickTime, utilizando Objective-C .

El uso que hace Apple del nombre de paquetequicktime de nivel superior viola la convención de la Especificación del Lenguaje Java que establece que los paquetes deben usar un esquema de nombre de dominio inverso, como com.apple.quicktime. Sin embargo, dado que Apple es propietaria de la marca registrada "QuickTime", no existe una posibilidad real de una colisión de espacios de nombres , cuya prevención es el propósito de la convención de nomenclatura de paquetes.

QTJ no es una implementación de QuickTime en Java. Es una capa de abstracción en Java que encapsula las llamadas nativas de QuickTime. Por este motivo, solo puede ejecutarse en sistemas que tengan instaladas las bibliotecas de QuickTime, concretamente el Mac OS clásico (que ya no cuenta con soporte), Mac OS X y Windows.

Características

QTJ ofrece acceso a la mayor parte de la biblioteca nativa de QuickTime, incluyendo:

  • Reproducción
  • Edición
  • Captura
  • Importación y exportación de gráficos
  • Importación y exportación de películas
  • Acceso a nivel de muestra

Como capa de abstracción sobre QuickTime, QTJ también hereda la compatibilidad con una amplia gama de formatos y códecs multimedia, incluidos MPEG-1 , MPEG-4 , H.264 , AAC , Sorenson Video , Flash , 3GPP , WAV , AIFF y muchos más. Dado que QuickTime se puede extender, QTJ puede incorporar compatibilidad con formatos como DivX y Ogg Vorbis mediante el uso de componentes de terceros para QuickTime .

Ejemplo de código

El siguiente ejemplo muestra un cuadro de diálogo de selección de archivos AWT y, a continuación, intenta importar y reproducir el archivo multimedia seleccionado.

import java.io.File ; import java.awt.* ;import quicktime.* ; import quicktime.std.movies.Movie ; import quicktime.app.view.QTFactory ; import quicktime.io.* ;clase pública TrivialQTJPlayer extiende Frame {public static void main ( String [] args ) { try { QTSession . open (); Frame f = new TrivialQTJPlayer (); f . pack (); f . setVisible ( true ); } catch ( Exception e ) { e . printStackTrace (); } } public TrivialQTJPlayer () throws QTException { FileDialog fd = new FileDialog ( this , "TrivialJMFPlayer" , FileDialog . LOAD ); fd . setVisible ( true ); File f = new File ( fd . getDirectory (), fd . getFile ()); OpenMovieFile omf = OpenMovieFile . asRead ( new QTFile ( f )); Movie m = Movie . fromFile ( omf ); Component c = QTFactory . makeQTComponent ( m ). asComponent (); add ( c ); m.start ( ) ; } }

La mayor parte del código de este ejemplo se centra en la configuración de la interfaz gráfica de usuario (GUI). Las únicas llamadas a QTJ son las llamadas a OpenMovieFile.asRead()y Movie.fromFile(), que crean una película QuickTime a partir del archivo especificado, y las llamadas a para crear un componente AWT a partir del QTFactory. Este ejemplo coloca la película en el marco y comienza a reproducirla inmediatamente; si se deseara una barra de control (también conocida como "scrubber"), se crearía un MovieControllera partir del Moviey luego un componente a partir del controlador, en lugar de a partir de la película.

Estado y perspectivas

La aceptación de QTJ está limitada por su naturaleza de capa de abstracción sobre la biblioteca propietaria QuickTime de Apple. No existe para ninguna otra plataforma que no sea Mac y Windows, y no existirá hasta que Apple adapte QuickTime a otra plataforma, como Linux.

Actualmente, la mayoría de las funcionalidades de QTJ no funcionan correctamente en ordenadores con Windows recientes. Los equipos Windows que utilizan la protección de página sin ejecución (NX) de las CPU más recientes no pueden ejecutar ni siquiera las demostraciones sin modificar la configuración. Esto puede comprobarse fácilmente mediante una prueba con una de las demostraciones incluidas en QTJ. Se informa de una "violación de la protección de ejecución" y Windows interrumpe el programa. Esto hace que QTJ no sea adecuado para el desarrollo de aplicaciones de usuario final debido a la compleja configuración necesaria de la función NX.

Tras el lanzamiento de QTJ 6.1 en 2003, Apple ha realizado pocas actualizaciones, principalmente para corregir errores. Cabe destacar que QuickTime 7 fue la primera versión de QuickTime que no contó con una actualización de QTJ que integrara las nuevas API nativas. Las nuevas API de QuickTime 7, como las que permiten trabajar con metadatos y con códecs de reordenamiento de fotogramas, no están disponibles para los programadores de QTJ. Apple tampoco ha ofrecido nuevas clases para proporcionar la funcionalidad de vista previa de captura presente en versiones de QTJ anteriores a la 6.1. De hecho, QTJ depende de algunas API nativas que Apple ya no recomienda, sobre todo QuickDraw .

Véase también

  • Java Media Framework
  • Xuggler , API de Java para codificación y decodificación de vídeo que funciona en Mac, Linux y Windows.
  • QuickTime para Java en Apple Developer Connection

Referencias

  1. "QTJava quedará obsoleto el próximo año" . Archivado del original el 5 de octubre de 2009. Consultado el 4 de mayo de 2010 .
  2. Owen W. Linzmayer, Apple Confidential 2.0
  3. El regreso de la Q azul
  4. Chris Adamson, QuickTime para Java: Un cuaderno para desarrolladores