В начало!  
Сделай закладку этой страницы в Digg Сделай закладку этой страницы в Del.icoi.us Сделай закладку этой страницы в Slashdot Сделай закладку этой страницы в Technorati
arrow Технологии arrow Java ME arrow Разработка приложений для Blu-Ray, часть 1: Создание вашего первого приложения


feed image

Разработка приложений для Blu-Ray, часть 1: Создание вашего первого приложения
Автор Дмитрий Силаев (перевод)   
20.11.2008 г.
Технология Java является неотъемлемой частью нового стандарта видео высокой четкости, стандарта Blu-ray дисков.

В этой серии из двух статей мы осветим несколько аспектов использования Java для создания приложений для дискового Blu-ray проигрывателя, включая популярные игровые приставки PlayStation 3.

Сейчас отличное время быть Java-разработчиком. В соответствии с последней статистикой, озвученной на конференции JavaOne 2008, в мире существует более 6 миллиардов Java-устройств. Эти устройства можно перечислить в диапазоне от крупных серверов промышленного класса до тонких смарт-карт, которые помещаются в вашем кошельке. Технология Java встраивается в миллиарды телефонов, а также в неисчислимое множество других устройств, включая традиционные настольные компьютеры (см. доступные платформы Java на рисунке 1).

 

                                       Рисунок 1. Различные Java-платформы доступные сегодня.

 

Java-платформа для Blu-ray проигрывателей называется BD-J. В первой части этой серии я собираюсь осветить следующие вопросы:

  • Основные требования для разработки BD-J приложений
  • Что может делать платформа BD-J
  • Спецификация BD-J и API
  • Понимание Blu-ray профилей
  • Xlet и его жизненный цикл
  • Создание вашего первого BD-J приложения

Я также полагаю, что вы совершенно не имеете опыта написания приложений на Java ME и создания видео контента. Итак, начнем.

Основные требования для разработки BD-J приложений

Вы можете быть удивлены узнав, что несмотря на то, что стандарт BD-J является частью платформы Java ME, вам понадобится очень мощное аппаратное оборудование для проигрывания  BD-J приложения на вашем компьютере. Здесь перечислены технические характеристики системы, которая вам нужна, чтобы создавать, записывать и проигрывать BD-J приложения на вашем компьютере:

  • Настольный компьютер или ноутбук под управлением Windows XP или Vista. К сожалению, во время написания этой статьи еще не было достаточного количества инструментов и аппаратного обеспечения для разработки BD-J приложений под Mac OS или Linux. Если вы пользователь платформы Mac, тогда вам лучше использовать Bootcamp с Windows, а не виртуальное программное обеспечение, из-за высоких требований к видео драйверу и дисплею.
  • Графическая карта с 256MB или с большим объемом памяти. Это важное требование, так как много вычислений, необходимых для отображения видео в формате высокой четкости, делается графическим процессором вашей видео карты, а не центральным процессором.
  • Монитор умеющий отображать видео высокой четкости. Full HD разрешение это 1920x1080 пикселей.
  • И наконец, записывающий дисковод Blu-ray. К счастью, некоторые дисководы продаются с перезаписываемыми Blu-ray дисками (также известными как BD-RE), поэтому вы можете использовать этот диск несколько раз для записи вашего приложения или фильма.

 Другими словами, на обычном настольном компьютере за 500 долларов или ноутбуке за 1000 вы сможете создать BD-J приложение и  записать Blu-ray диск, но ни тот ни другой не смогут проиграть Blu-ray диск из-за значительных требований, которые налагает видео высокой четкости. К счастью, корпорация CyberLink сделала инструмент диагностики, который определяет, может ли ваш компьютер проигрывать Blu-ray диск. На рисунке 2 показан снимок окна этого приложения, запущенного на моем ноутбуке.


 

Рис. 2. CyberLink Advisor Tool показывает, что этот ноутбук не может проигрывать фильмы, записанные в формате Blu-ray.


Что может делать платформа BD-J

 Итак, что в точности вы можете делать на платформе BD-J? Я рад, что вы спросили. Однако, перед тем, как мы рассмотрим возможности платформы BD-J,  разумно сначала разобраться в терминологии, которая часто используется во время создания BD-J  приложений.

  • Диск (Disc):  Диск это физический носитель информации который содержит видео контент в формате высокой четкости и BD-J jar-файлы.
  • Тайтл (Title):  Диск может иметь один или несколько тайтлов. В повседневной терминологии тайтл это фильм. Однако, если вы хотите создать диск, который содержит десять эпизодов кулинарного шоу, вы, вообще говоря, не можете назвать каждый эпизод фильмом. Таким образом, организованная единица видео контента на диске называется тайтлом.
  • Меню (Menu):  Меню это интерактивная часть BD-J приложения, которая реагирует на ввод с пульта дистанционного управления проигрывателем. Взаимодействуя с меню, вы можете выбрать тайтл, начать проигрывание тайтла, а также включать и выключать дополнительные опции на диске.

 Теперь, когда мы дали терминологию использующуюся при создании BD-J приложений и разработки контента, давайте рассмотрим возможности платформы BD-J. Используя BD-J API вы имеете возможность отобразить любой текст, нарисовать рисунок или анимацию на экране. Это позволяет вам создавать приложения, которые могут делать следующее:

  • Отобразить простой текст на экране, который активизируется при отображении текущего кадра. Как вы можете заметить, это будет полезно для показа субтитров.
  • Нарисовать фигуру или рисунок на экране поверх отображаемого видео контента .
  • Нарисовать и мультиплицировать рисунок на экране во время интерактивной игры.
  • Создать анимированные кнопки с эффектами плавного выведения и перемещения.
  • Создать интерактивное меню которые позволит пользователю выбрать тайтл, эпизод или любую из дополнительных опций, таких как показ дополнительного контента. Рисунок 3 показывает меню из примера, представленного в проекте HDCookbook (прекрасный ресурс для BD-J разработчиков).

 

Рис. 3. Интерактивное меню созданное при помощи BD-J API


 Добавим также, что  BD-J API позволяет вам начать проигрывание любого видео контента на диске, что означает, что вы можете создать приложение, которое может делать следующее:

  • Начать проигрывание тайтла при выборе соответствующего пункта меню. Это один из наиболее привычных сценариев для проигрывания видео.
  • Начать проигрывание видео заставки сразу после установки диска в проигрыватель.
  • Начать проигрывание двух видео источников одновременно, используя  программный интерфейс для воспроизведения картинки в картинке.

 Более того,  используя BD-J API  ваша программа может обрабатывать команды пользователя вводимые через пульт дистанционного управления, доступаться к данным по сети или сохранять данные в  локальном постоянном накопителе Blu-ray проигрывателя – подождите, Blu-ray проигрыватель имеет локальное хранилище данных?  Да, в настоящее время проигрыватели на рынке должны иметь 64 кВ памяти для постоянного хранения данных.  Blu-ray проигрыватели также могут сохранять данные в “виртуальной файловой системе”,  но мы будем рассматривать это позже в данной статье.  Итак, из сказанного выше,  эти возможности BD-J API  также позволят вам создать приложения, которые:

  • Изменяют действия при нажатии на кнопки на пульте дистанционного управления.
  • Скачивают и проигрывают дополнительный контент, когда диск находится в Blu-ray проигрывателе.
  • Позволяют владельцу диска безопасно покупать различные предметы, такие как одежду, сувениры, книги и так далее, на сайтах электронной торговли.
  • Сохраняют на дисковом Blu-ray проигрывателе небольшой объем данных, такой как лучший счет в игре или информацию о том, что вы уже разблокировали определенные специальные возможности на диске.
  • Позволяют дисковому Blu-ray проигрывателю оставить ваше приложение выполняющимся после того как диск вынут из проигрывателя. Это окажется очень полезным, когда вы создаете несколько дисков и хотите, чтобы ваше приложение продолжало работать и поддерживало свое текущее состояние для всех этих дисков – очень мощная функциональная возможность!

Спецификация BD-J и API

 Как вы можете заметить BD-J спецификация не была создана за ночь, и она, определенно, использовала многие другие Java-спецификации, которые функционируют на домашней платформе и арене потребительской электроники. Если вы вспомните рисунок 1, Java-платформа для потребительской электроники это CDC (Connected Device Configuration). На рисунке 4 мы собираемся показать API-стек, который формирует BD-J спецификацию.

 

Рисунок 4. BD-J API стек содержит несколько уже существующих программных интерфейсов.


Теперь, так как вы уже отчасти знакомы со спецификациями, давайте сделаем обзор классов специфичных для BD-J.

Blu-ray Java API

org.bluray.application

Этот пакет содержит всего один класс, который расширяет класс из GEM/MHP API. Он предоставляет несколько функциональных возможностей, включая систему уведомлений о событиях установки и извлечения диска.

org.bluray.media

Этот пакет содержит классы, специфичные для медиа, которое имеет отношение к Blu-ray проигрывателям и они расширяют функциональность спецификации GEM/MHP. Эти классы включают механизм контроля картинки-в-картинки, субтитров и аудио. 

org.bluray.net

Сперва вы можете предположить, что этот пакет содержит все классы отвечающие за сетевое соединение TCP/IP Blu-ray проигрывателя. На самом деле вся эта работа уже проделана в пакете java.net из PBP. Вместо этого пакет содержит один единственный класс, который расширяет функциональность Java TV API для того, чтобы определить локатор для устройства  Blu-ray. Что такое локатор? Это просто текстовая сторка которая отформатирована подобно URL. В контексте Blu-ray спецификации локатор используется для выбора тайтлов на диске. 

org.bluray.storage

Это пакет содержит три класса которые позволяют вам определить количество свободного пространства на локальном накопителе Blu-ray проигрывателя. Заметьте, что постоянный накопитель должен присутствовать на всех проигрывателях Blu-ray, но виртуальная файловая система (которая позволяет вам сохранять большие объемы данных, таких как видео контент), не является обязательной для всех проигрывателей.

org.bluray.system

Этот пакет содержит единственный класс, который позволяет вам получить доступ к системным регистрам Blu-ray проигрывателя.

org.bluray.ti

Этот пакет содержит массу классов, дающих вам информацию о тайтле и метаданные тайтлов на диске.

org.bluray.ui

Этот пакет содержит классы, которые добавляют функциональность пользовательского интерфейса, который не предостваляется пакетом java.awt в PBP. Эти классы позволяют вам делать анимацию, которая синхронизирована с видео кадрами.

org.bluray.vfs

Классы этого пакета позволяют вам сохранять данные в виртуальной файловой системе. Виртуальная файловая система не обязана присутствовать на всех Blu-ray проигрывателях, но она будет присутствовать на тех, которые поддерживают сетевое соединение.

GEM и MHP API

Спецификация BD-J, определенно, не первая спецификация, которая использует  Java для устройств потребительской электроники. Спецификации для Multimedia Home Platform (MHP) и Globally Executable Multimedia Home Platform (GEM) определяют программный интерфейс который поначалу был предназначен для кабельных приемников и других мультимедийных устройств для дома. Так как спецификация GEM является мировым стандартом, она была использована другими стандартами для устройств потребительской электроники, а именно:

  • Blu-ray Disc Java (BD-J)
  • OpenCable Application Platform (OCAP), сейчас называемой Tru3way
  • Advanced Common Application Platform (ACAP)

 В контексте этой статьи я не хочу углубляться в суть GEM/MHP платформы. Следующий список показывает Java-пакеты из GEM/MHP API, которые включены в BD-J  стандарт.


org.davic.media

dvb.event

dvb.test

org.davic.net

dvb.io

dvb.ui

org.davic.resources

dvb.lang

dvb.user

dvb.application

dvb.media

havi.ui

dvb.dsmcc

dvb.net

 

 

Java TV 1.1 API

Если вы вернетесь к рисунку 2, то увидите, что полный BD-J стандарт использует также функциональность, которая пришла из Java TV API.  Этот программный интерфейс добавляет существенные возможности BD-J приложениям, такие как базовая модель Xlet'ов (которые я опишу в деталях ниже в этой статье), а также определение класса javax.tv.service.Service. Для поддерживающих Java-технологию телеприемников и телеприставок (включающих кабельные приемники и цифровые видео рекордеры (DVR), сервис это канал. Так, на пример, если бы вы захотели написать  простое приложение, которое программирует ваш цифровой видео рекордер, поддерживающий Java, каждый день в 16:00 настраиваться на канал 203, тогда вам бы понадобилось использовать классы из пакета javax.tv.service, чтобы выполнить эту задачу. Для устройств Blu-ray, javax.tv.service.Service это дисковый тайтл. Следующий список содержит полный перечень пакетов Java TV API.


javax.tv.graphics

javafx.tv.service

javax.tv.locator

javafx.tv.util

javax.tv.media

javafx.tv.xlet

javax.tv.net

 

 

Personal Basis Profile, Foundation Profile и Connected Device Configuration API

Вместе, Personal Basis Profile (PBP), Foundation Profile (FP) и Connected Device Configuration (CDC) составляют основание, которое используют другие более высокоуровневые программные интерфейсы, разработанные для встраиваемых устройств и устройств потребительской электроники. Эти классы - привычные классы  из Java SE, хорошо знакомые Java-программистам, пишущим приложения для настольных компьютеров. Эти классы не являются эквивалентом полному стандарту Java SE 1.6 (Java SE 6), но они очень похожи на классы из стандарта  Java SE 1.3 с несколькими исключениями. Отсутствуют пакеты JDBC, Swing и высокоуровневые графические элементы библиотеки AWT, которые предполагают, что ввод на стороне пользователя включает координатно-указательное устройство (т.е. мышь). Теперь вам следует также узнать, что, так как это платформа Java ME (а не Java SE), то вы будете иметь доступ к классам пакета javax.microedition.io, которые также доступны на мобильных телефонах с Java. Далее следует перечисление классов из PBP, FP, CDC API:

 

java.awt

java.math

java.text

java.beans

java.net

java.util

java.io

java.rmi

javax.microedition.io

java.lang

java.security

javax.microedition.xlet

 

Профили BD-J

В проигрывателях присутствующих на рынке реализовано несколько разных версий спецификации Blu-ray Disc.

Первая версия спецификации Blu-ray Disc была выпущена, как  профиль 1.0.

Следующий релиз - Blu-ray Disc Profile 1.1, который также называется “Bonus View”. В профиле 1.1, спецификация требует поддержки функции картинка-в-картинке (PiP), а также присутствие виртуальной файловой системы, которая должна иметь возможность сохранять по крайней мере 256MB данных.

Самая свежая версия профиль 2.0, также названый “BD-Live”. Этот профиль требует реализации всех функциональных возможностей профиля 1.1 и добавляет требование   возможности соединения с Интернетом. Профиль 2.0 также обязывает, чтобы виртуальная файловая система сохраняла по крайней мере 1GB данных. Так как однослойный Blu-ray диск может хранить 25G данных, вы можете заметить, что виртуальнай файловая система профиля 2.0 не может содержать полный фильм. Однако это достаточно большое пространство для вашего приложения, использующего связь с Интернетом и сохраняющего видео контент для последующего воспроизведения.

 Xlet и его жизненный цикл

 Если вы программировали на Java в течении какого-то времени, вы, должно быть, хорошо знакомы с конвенцией наименования *let, которая применяется к апплетам, сервлетам и мидлетам. К счастью, приложение на платформе CDC не называется CDClet, но они называются Xlet'ами так как никто не смог найти лучшего названия.

 Чтобы создать BD-J приложение, по крайней мере один из ваших классов должен реализовать интерфейс javax.tv.xlet.Xlet, который определен в Java TV API. Если вы знакомы с классами из PBP, то вы знаете, что Xlet также определен в пакете javax.microedition.xlet. Поэтому, чтобы не попасть в неприятность при построении вашего BD-J приложения, убедитесь, что вы импортируете Xlet из пакета Java TV.

 Жизненный цикл Xlet’а достаточно прост. После того как был вызван конструктор, ваш Xlet переходит в состояние “загружен” (Loaded). В добавление к конструктору, метод initXlet() также будет вызван, что переведет ваш Xlet в состояние “пауза” (Paused) до тех пор пока метод startXlet() не будет вызван. Как вы можете видеть на рисунке 5, ваше приложение может переходить между состояниями “пауза” и “активный” (Active) несколько раз перед тем как оно будет уничтожено. Поэтому, метод startXlet() является хорошим местом для кода, который позволяет вам проверять сетевое соединение и другие важные ресурсы перед тем как вы начнете (или продолжите) выполнение кода делающего остальную работу.

Рис. 5. Диаграмма состояний Xlet'а

 

Теперь, когда у нас есть все предварительные знания, давайте погрузимся прямо в процесс создания первого приложения.

 Создание вашего первого BD-J приложения

В приведенном ниже примере (FirstBDJApp.java) я показал простое приложение, которое реализует все методы жизненного цикла Xlet'а и выполняет очень простую операцию: написание текста на экране.

package test;

 

import javax.tv.xlet.Xlet;

import javax.tv.xlet.XletContext;

 

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Container;

import java.awt.Font;

import java.awt.Graphics;

 

import org.havi.ui.HScene;

import org.havi.ui.HSceneFactory;

 

public class FirstBDJApp implements Xlet {

    private static Font font;

    private HScene scene;

    private Container gui;

    private String text = "My first BD-J app running on the PS3!";

    //private String text = "My first BD-J app running on " + System.getProperty("os.name");

 

        public FirstBDJApp() {

    }

 

    public void initXlet(XletContext context) {

        font = new Font(null, Font.PLAIN, 48);

        scene = HSceneFactory.getInstance().getDefaultHScene();

        gui = new Container() {

            public void paint(Graphics g) {

                g.setFont(font);

                g.setColor(new Color(10, 10, 10));

                g.fillRect(20, 20, getWidth() - 40, getHeight() - 40);

                g.setColor(new Color(245, 245, 245));

                int message_width = g.getFontMetrics().stringWidth(text);

                g.drawString(text, (getWidth() - message_width) / 2, 500);

            }

        };

 

        gui.setSize(1920, 1080); 

        scene.add(gui, BorderLayout.CENTER);

        scene.validate();

    }

 

    public void startXlet() {

        gui.setVisible(true);

        scene.setVisible(true);

    }

 

    public void pauseXlet() {

        gui.setVisible(false);

    }

 

    public void destroyXlet(boolean unconditional) {

        scene.remove(gui);

        scene = null;

    }

}

 

Как вы можете видеть, мы не используем высокоуровневые графические элементы для вывода текста. Мы просто считаем размер, который займет текст и используем объект Graphics, чтобы нарисовать этот текст на экране. Рисунок 6 иллюстрирует, как работа нашего приложения отображается на игровой приставке PS3:


Рис. 6: Результат выполнения приложения FirstBDJApp.java на игровой консоли PS3.

 

Заключение

 Таким образом, теперь он у вас есть – полностью работающий пример, от начала и до конца, того, как создать BD-J приложение, которое работает на любом проигрывателе Blu-ray. Как вы можете видеть из BD-J API, мы только поцарапали поверхность вершину айсберга. В части 2 мы собираемся дать более детальные инструкции того, как создать среду  разработки, чтобы собрать BD-J приложение. Мы также дадим конкретный пример того, как обрабатывать команды от пульта дистанционного управления проигрывателя.

 Благодарности

 Я хочу поблагодарить Била Фута (Bill Foot), Чахиро Саито (Chahiro Saito) и команду разработчиков HDCookbook за содействие, отзывы и всю их помощь в улучшении этой статьи. Пример кода, приведенный в этой статье был, по большей части, заимствован из демонстрационного приложения, созданного с помощью плагина Netbeans, разработанного Чахиро.


Оригинал статьи.
 

Добавить комментарий


Защитный код
Обновить