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

externa länkar

  1. ^ QTJava kommer att skrivas av nästa år.
  2. ^ Owen W. Linzmayer, Apple Confidential 2.0
  3. ^ The Return of the Blue Q
  4. ^ Chris Adamson, QuickTime för Java: En utvecklares anteckningsbok