QuickTime för Java
QuickTime för Java eller QTJ är ett mjukvarubibliotek som tillåter programvara som är skriven i programmeringsspråket Java att tillhandahålla multimediafunktionalitet genom att ringa in i det inhemska QuickTime -biblioteket. I praktiken tillåter det Java-program på Mac OS , Mac OS X och Microsoft Windows att stödja insamling, redigering, uppspelning och export av många olika medieformat och codecs .
QTJ har förkastats av Apple.
Historia
Owen W. Linzmayer, i Apple Confidential 2.0 , spårar QuickTime för Javas tillkomst tillbaka till Kaleida Labs , ett spin-off-företag skapat av Apple Computer och IBM , och noterar att det och vissa Unicode-textklasser var den enda Mac-programvaran som räddades från de fyra- år, 150 miljoner dollar katastrof. Porterad till Mac OS utvecklades den under kodnamnet "Biscotti", och släpptes först som en offentlig beta 1999. [ citat behövs ] Senare versioner installerades som standard med Mac OS och Mac OS X, och var valfria del av QuickTime-installationen för Windows.
QTJ 6.1
2003 utfärdade Apple en Java 1.4.1-implementering som bröt alla QTJ-applikationer som försökte köras under 1.4.1 på Mac OS X. Det underliggande problemet var Apples övergång från Carbon till Cocoa för deras AWT -implementering och borttagningen av en Java -till-native-biblioteket "JDirect" som QTJ förlitade sig på. QTJ-applikationer kunde fortfarande köras under Java 1.3.1, men appar som inte angav vilken version av Java de krävde, eller som behövde 1.4-funktioner, gjordes oanvändbara.
Senare samma år släppte Apple en ny version av QTJ som tog itu med inkompatibiliteterna, genom att erbjuda en kompatibel men nedskalad version av GUI-klasserna. Denna 6.1-version av QTJ förändrade också radikalt API, så att istället för att utvecklare skapa GUI-komponenter och associera filmer
eller andra renderbara objekt med dem, behövde utvecklarna nu börja med filmen
och begära en lämplig komponent från en fabrik. Den nya versionen försummade också att tillhandahålla en komponent för att visa en visuell förhandsvisning av indata från en inspelningsenhet, som en webbkamera eller videokamera .
Design
QTJ lägger ett objektorienterat API ovanpå det inbyggda C-baserade QuickTime-biblioteket. Den gör detta genom att associera vanliga strukturer
och de funktioner som fungerar med dem i klasser. Till exempel Movie
-strukturen basen för klassen quicktime.std.movies.Movie
, med funktioner som NewMovieFromFile
och GetMovieTrackCount
som blir instansmetoderna fromFile()
respektive getTrackCount()
. Resultatet är mer som ett äkta objektorienterat API än andra C-till-Java-anpassningar (som JOGL , som dumpar OpenGL- huvudfilerna i klasser med tusentals statiska metoder).
Det kakaobaserade QTKit är ett liknande försök att lägga ett objektorienterat lager ovanpå det procedurmässiga QuickTime-biblioteket med hjälp av Objective-C .
Apples användning av toppnivåpaketnamnet quicktime bryter mot Java-
språkets specifikationskonvention att paket använder ett omvänt domännamnsschema, såsom com.apple.quicktime
. Men eftersom Apple äger varumärket "QuickTime" finns det ingen realistisk chans för en kollision med namnutrymmet , vars syfte är syftet med paketnamnkonventionen.
Det är viktigt att komma ihåg att QTJ inte är en Java-implementering av QuickTime, det är ett Java- omslag runt inhemska QuickTime-anrop. Av denna anledning kan den bara köras på system som har QuickTime-biblioteken installerade, nämligen det klassiska Mac OS (som inte längre stöds), Mac OS X och Windows.
Funktioner
QTJ erbjuder tillgång till det mesta av det inbyggda QuickTime-biblioteket, inklusive
- Uppspelning
- Redigering
- Fånga
- Grafisk import och export
- Film import och export
- Tillgång på provnivå
Som ett omslag kring QuickTime ärver QTJ också stöd för en stor samling medieformat och codecs, inklusive MPEG-1 , MPEG-4 , H.264 , AAC , Sorenson Video , Flash , 3GPP , WAV , AIFF och mer. Eftersom QuickTime i sig kan utökas, kan QTJ hämta stöd för format som DivX och Ogg Vorbis genom användning av QuickTime- komponenter från tredje part .
Kodexempel
Följande exempel visar en AWT-filvalsdialog och försöker sedan importera och spela upp den valda mediefilen.
importera java.io.File ; importera java.awt.* ; importera quicktime.* ; importera quicktime.std.movies.Movie ; importera quicktime.app.view.QTFactory ; importera quicktime.io.* ; public class TrivialQTJPlayer utökar Frame { public static void main ( String [] args ) { try { QTSession . öppna (); Ram f = ny TrivialQTJPlayer (); f . pack (); f . setVisible ( sant ); } catch ( Undantag e ) { e . printStackTrace (); } } public TrivialQTJPlayer () kastar QTException { FileDialog fd = new FileDialog ( detta , "TrivialJMFPlayer" , FileDialog . LOAD ); fd . setVisible ( sant ); Fil f = ny fil ( fd . getDirectory (), fd . getFile ()); OpenMovieFile omf = OpenMovieFile . asRead ( ny QTFile ( f )); Film m = Film . fromFile ( omf ); Komponent c = QTFactory . makeQTComponent ( m ). asComponent (); lägg till ( c ); m . start (); } }
Det mesta av koden i det här exemplet handlar om att ställa in det grafiska användargränssnittet. De enda anropen till QTJ är anropen till OpenMovieFile.asRead()
och Movie.fromFile() ,
som skapar en QuickTime-film från den angivna filen, och anropen för att skapa en AWT-komponent från QTFactory
. Det här exemplet placerar filmen i bildrutan och börjar omedelbart spela upp den; om ett kontrollfält (aka en "scrubber") önskades, skulle du skapa en MovieController
från filmen
och sedan skapa en komponent från kontrollern, snarare än från filmen.
Status och Outlook
QTJ:s acceptans är begränsad till sin natur som ett omslag runt Apples proprietära QuickTime-bibliotek. Det finns inte för någon annan plattform än Mac och Windows, och kan inte förrän och om inte Apple portar QuickTime till en annan plattform, som Linux.
För närvarande är det mesta av QTJ trasigt på senaste Windows-datorer. Windows-datorer som använder sidskyddsfunktionen no-execute (NX) från de senaste processorerna kan inte köra ens demos utan att ändra konfigurationen. Detta kan enkelt verifieras av en utvecklare via en testkörning av en av demos som kommer med QTJ. En "överträdelse av exekveringsskydd" rapporteras och programmet avbryts av Windows. Detta gör QTJ olämplig för applikationsutveckling för slutanvändare på grund av den nödvändiga komplicerade konfigurationen av NX-funktionen.
Efter 2003 års release av QTJ 6.1 har Apple gjort få uppdateringar av QTJ, mestadels fixat buggar. Noterbart är att QuickTime 7 var den första versionen av QuickTime som inte åtföljdes eller följdes av en QTJ-release som täckte in de nya inbyggda API:erna. QuickTime 7:s nya API:er, såsom de för att arbeta med metadata och med kodar för omordning av ramar, är inte tillgängliga för QTJ-programmerare. Apple har inte heller erbjudit nya klasser för att tillhandahålla den förhandsvisningsfunktion som fanns i versioner av QTJ före 6.1. QTJ är faktiskt beroende av vissa inbyggda API:er som Apple inte längre rekommenderar, framför allt QuickDraw .
Se även
- Java Media Framework
- Xuggler , Java API för videokodning och avkodning som fungerar på Mac, Linux och Windows
externa länkar
- QuickTime för Java på Apple Developer Connection
- ^ QTJava kommer att skrivas av nästa år.
- ^ Owen W. Linzmayer, Apple Confidential 2.0
- ^ The Return of the Blue Q
- ^ Chris Adamson, QuickTime för Java: En utvecklares anteckningsbok