QuickTime для Java
QuickTime для Java или QTJ — это библиотека программного обеспечения , которая позволяет программному обеспечению, написанному на языке программирования Java , обеспечивать мультимедийные функции путем вызова собственной библиотеки QuickTime . На практике это позволяет приложениям Java в Mac OS , Mac OS X и Microsoft Windows поддерживать захват, редактирование, воспроизведение и экспорт множества различных медиаформатов и кодеков .
QTJ признан Apple устаревшим. [ 1 ]
История
[ редактировать ]Оуэн В. Линцмайер в Apple Confidential 2.0 проследил происхождение QuickTime для Java до Kaleida Labs , дочерней компании, созданной Apple Computer и IBM , отметив, что это и некоторые текстовые классы Unicode были единственным программным обеспечением Mac, спасенным от четырех год, катастрофа на 150 миллионов долларов. [ 2 ] Портированная на Mac OS, она была разработана под кодовым названием «Biscotti» и впервые выпущена как публичная бета-версия в 1999 году. [ нужна ссылка ] Более поздние версии устанавливались по умолчанию вместе с Mac OS и Mac OS X и были дополнительной частью установки QuickTime для Windows.
КТЖ 6.1
[ редактировать ]В 2003 году Apple выпустила реализацию Java 1.4.1, которая сломала все приложения QTJ, пытавшиеся работать под версией 1.4.1 в Mac OS X. Основная проблема заключалась в переходе Apple с Carbon на Cocoa для реализации AWT и удалении Java. -в нативную библиотеку под названием «JDirect», на которую опирался QTJ. Приложения QTJ по-прежнему могли работать под управлением Java 1.3.1, но приложения, в которых не была указана требуемая версия Java или которым требовались функции 1.4, становились непригодными для использования.
Позже в 2003 году Apple выпустила новую версию QTJ, в которой были устранены несовместимости, предложив совместимую, но уменьшенную версию классов GUI. Эта версия QTJ 6.1 также радикально изменила API, так что вместо того, чтобы заставлять разработчиков создавать компоненты графического интерфейса и связывать их с Movie
s или других визуализируемых объектов с их помощью, разработчикам теперь нужно было начать с Movie
и запросите подходящий компонент на заводе. В новой версии также не был предусмотрен компонент для визуального предварительного просмотра ввода с устройства захвата, такого как веб-камера или видеокамера . [ 3 ]
Дизайн
[ редактировать ]QTJ размещает объектно-ориентированный API поверх собственной библиотеки QuickTime на основе C. Это достигается путем связывания общих struct
s и функции, работающие с ними, в классы. Например, Movie
структура — это основа класса quicktime.std.movies.Movie
, с такими функциями, как NewMovieFromFile
и GetMovieTrackCount
становимся методами экземпляра fromFile()
и getTrackCount()
соответственно. Результат больше похож на настоящий объектно-ориентированный API, чем на другие адаптации C-to-Java (например, JOGL OpenGL , который выгружает файлы заголовков в классы с тысячами статических методов). [ 4 ]
на основе Cocoa QTKit — это аналогичная попытка разместить объектно-ориентированный слой поверх процедурной библиотеки QuickTime с использованием Objective-C .
верхнего уровня пакета Использование Apple имени quicktime
нарушает соглашение спецификации языка Java, согласно которому пакеты используют схему обратного доменного имени, например com.apple.quicktime
. нет Однако, поскольку Apple владеет товарным знаком «QuickTime», реальной вероятности конфликта пространств имен , предотвращение которого является целью соглашения об именовании пакетов.
QTJ не является реализацией QuickTime на Java. Это Java- обертка для собственных вызовов QuickTime. По этой причине он может работать только в системах, в которых установлены библиотеки QuickTime, а именно в классической Mac OS (которая больше не поддерживается), Mac OS X и Windows.
Функции
[ редактировать ]QTJ предлагает доступ к большей части встроенной библиотеки QuickTime, включая
- Воспроизведение
- Редактирование
- Захватывать
- Графический импорт и экспорт
- Импорт и экспорт фильмов
- Доступ на уровне выборки
Будучи оболочкой QuickTime, QTJ также наследует поддержку обширной коллекции медиаформатов и кодеков, включая MPEG-1 , MPEG-4 , H.264 , AAC , Sorenson Video , Flash , 3GPP , WAV , AIFF и других. Поскольку сам QuickTime можно расширить, QTJ может получить поддержку таких форматов, как DivX и Ogg Vorbis, за счет использования сторонних компонентов QuickTime .
Пример кода
[ редактировать ]В следующем примере показано диалоговое окно выбора файла AWT, а затем попытка импортировать и воспроизвести выбранный медиафайл.
import java.io.File;
import java.awt.*;
import quicktime.*;
import quicktime.std.movies.Movie;
import quicktime.app.view.QTFactory;
import quicktime.io.*;
public class TrivialQTJPlayer extends 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();
}
}
Большая часть кода в этом примере связана с настройкой графического интерфейса. Единственными вызовами QTJ являются вызовы OpenMovieFile.asRead()
и Movie.fromFile()
, которые создают фильм QuickTime из указанного файла, и вызовы для создания компонента AWT из QTFactory
. В этом примере фильм помещается в рамку и сразу же начинается его воспроизведение; если бы вам хотелось иметь панель управления (также известную как «скруббер»), вы бы создали MovieController
из Movie
а затем создайте компонент из контроллера, а не из фильма.
Статус и перспективы
[ редактировать ]Принятие QTJ ограничено его природой как оболочки собственной библиотеки QuickTime от Apple. Он не существует ни для одной платформы, кроме Mac и Windows, и не может существовать до тех пор, пока Apple не перенесет QuickTime на другую платформу, например Linux.
В настоящее время большая часть QTJ не работает на последних компьютерах под управлением Windows. Компьютеры Windows, использующие функцию защиты страниц без выполнения (NX) последних процессоров, не могут запускать даже демонстрационные версии без изменения конфигурации. Разработчик может легко убедиться в этом, протестировав одну из демо-версий, поставляемых с QTJ. Сообщается о «нарушении защиты выполнения», и Windows прерывает работу программы. Это делает QTJ непригодным для разработки приложений для конечных пользователей из-за необходимой сложной настройки функции NX.
После выпуска QTJ 6.1 в 2003 году Apple внесла в QTJ несколько обновлений, в основном исправляющих ошибки. Примечательно, что QuickTime 7 был первой версией QuickTime, за которой не последовал выпуск QTJ, включающий новые собственные API. Новые API QuickTime 7, например, для работы с метаданными и кодеками переупорядочения кадров, недоступны программистам QTJ. Apple также не предложила новые классы для обеспечения функции предварительного просмотра захвата, которая присутствовала в версиях QTJ до 6.1. Действительно, QTJ зависит от некоторых собственных API, которые Apple больше не рекомендует, в первую очередь от QuickDraw .
См. также
[ редактировать ]- Java Медиа-фреймворк
- Xuggler , Java API для кодирования и декодирования видео, работающий на Mac, Linux и Windows.
Внешние ссылки
[ редактировать ]- QuickTime для Java в Apple Developer Connection
Ссылки
[ редактировать ]- ^ QTJava будет обесценена в следующем году.
- ^ Оуэн В. Линцмайер, Apple Confidential 2.0
- ^ Возвращение синего Q
- ^ Крис Адамсон, QuickTime для Java: записная книжка разработчика