网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > JSP > 正文
使用 Java ME 开发蓝光盘应用程序,第一部分:创
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/11/29
下载{$ArticleTitle}原创论文样式

  现在是成为 Java 开发人员的大好时机。根据 JavaOne 2008 大会提供的最新统计数据,全世界部署了超过六十亿支持 Java 功能的设备。这些设备涵盖了从大型企业级服务器到可以放入皮夹中的微型智能卡的各种设备。Java 技术已经被嵌入到数以亿计的电话,以及包括传统台式机在内的无数其他设备中:图 1 显示了现有的各种 Java 平台)。

  使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序

  图 1:当前可用的各种 Java 平台

  用于蓝光播放器的 Java 平台叫做 BD-J。在本系列的第 1 部分,我们将涵盖以下主题:

  BD-J 开发的基本要求

  BD-J 平台的功能

  BD-J 规范和 API

  理解蓝光配置文件

  Xlet 和 Xlet 生命周期

  创建您的第一个 BD-J 应用程序

  我们假设您不具备创建 Java ME 或视频内容的任何经验。在这个基础上,我们就可以开始了。

  BD-J 开发的基本要求

  尽管 BD-J 标准是 Java ME 平台的一部分,但是您仍然需要一个更加强大的机器,以便在您的 PC 上播放 BD-J 应用程序。下面列出了在您的 PC 上创建、刻录和播放 BD-J 应用程序的物理要求:

  一台运行 Windows Vista 或 XP 的台式机或膝上型电脑。不幸的是,在写这篇论文的时候,还没有很多用于在 Mac OS 或 Linux 上进行 BD-J 开发的工具和硬件。如果您是 Mac 用户,那么与使用虚拟化软件相比,您最好还是使用带 Bootcamp 的 Windows 系统,因为高清视频对视频驱动程序和显示器的要求比较严格。

  显存不低于 256MB 的显卡。这个要求非常重要,因为大部分渲染高清视频所需的艰苦工作将由显卡的 GPU 来完成,而不是由主板上的 CPU 完成。

  能够渲染高清视频的视频显示器。高清视频的分辨率为 1920x1080 像素。

  一台蓝光刻录设备。幸运的是,一些驱动器附带了可擦写的蓝光光盘(也称之为 BD-RE),这样您可以重复使用该光盘创建您的应用程序或电影。

  换句话说,通常 500 美元的台式机或者 1000 美元的膝上电脑可能 就可以创建 BD-J 应用程序和刻录蓝光光盘,但是二者可能都无法播放蓝光光盘,因为高清视频对系统的要求非常高。幸运的是,CyberLink 公司开发了一款 方便的诊断工具,可用于确认您的机器是否能够播放蓝光视频。下面的图 2 显示了一个在我的膝上电脑上运行的工具的屏幕截图。

  使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序

  图 2:该 CyberLink Advisor 工具指出这台膝上电脑不能播放蓝光电影

  BD-J 平台的功能

  那么,您可以使用 BD-J 平台做什么呢?我很高兴您问了这个问题。但是,在我们讨论 BD-J 平台的功能之前,最好先说明一下创建 BD-J 应用程序时经常使用的一些术语:

  光盘: 光盘是承载高清视频内容和 BD-J jar 文件的物理介质。

  节目(Title):一张光盘可以有一个或多个节目。在外行的术语中,一个节目就是一部电影。但是,如果您想要创建一张包含分为 10 段的烹饪影片的蓝光光盘,您不能把每段都称为一部电影。因此,光盘上有组织的一个视频内容单元就叫做一个“节目”。

  菜单:菜单是 BD-J 应用程序的交互部分,可响应遥控器的输入。通过与菜单交互,您可以在光盘上选择标题、开始播放标题,以及激活或者停用高级选项。

  现在我们已经涵盖了创建 BD-J 应用程序和制作内容时要用的术语,让我们来研究 BD-J 平台的功能。使用 BD-J API,您可以在显示器上绘制任何文本、图像或动画。这使您可以创建具有以下功能的应用程序

  在屏幕上绘制由当前显示的帧触发的简单文本。可以想象,这对呈现字幕将非常有用。

  在显示器上绘制图形或图像,并在当前显示的视频内容上面显示。

  在显示器上为互动游戏绘制图像,并使图像运动起来。

  创建具有特效(像淡化和过度)的动画按钮。

  创建高度互动的菜单,允许用户选择节目、章节或任何其他高级选项,像奖励内容 (bonus content)。实际上。图 3 显示了 HDcookbook 项目中(对 BD-J 开发人员来说是很好的资源)提供的示例代码呈现的菜单。

  使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序

  图 3:使用 BD-J API 呈现的交互菜单

  另外,BD-J API 允许您开始播放光盘上的任何视频内容,这意味着您可以创建具有任何以下功能的应用程序

  根据菜单选择开始播放节目。这是最普通的视频播放场景。

  启动“first playback”(首先播放),这使光盘插入播放器时开始播放内容。

  使用进行画中画 (Picture in Picture, PiP) 呈现的 API 同时开始播放两个视频流。

  另外,使用 BD-J API,您可以响应来自遥控器的用户输入,通过网络访问数据,或者在蓝光播放器的本地永久存储器上存储数据——等等,蓝光播放器有本地存储器?是的,当前市场上的播放器要求有 64 KB 内存用于永久存储。蓝光播放器也可以把数据存储到一个“虚拟文件系统”,但是稍后我们将在本文中进行讨论。那么,以此为前提,BD-J API 的这些功能也将使您能够创建具有以下功能的应用程序

  根据遥控器的输入更改操作。

  当光盘在蓝光播放器中时,下载奖励内容并播放特殊功能。

  允许光盘所有者安全地从电子商务网站购买衣服、纪念品、书籍等东西。

  允许蓝光播放器“记住”游戏最高分等内容,或者知道您已经解锁光盘上的某些特殊功能。

  允许蓝光播放器在光盘弹出后仍保持应用程序运行。当您有一套盒装光盘,您希望在播放所有这一套光盘时,应用程序程序可以继续运行并且保持状态,那么这个功能将非常有用——一个非常强大的功能!

  现在您已经很好地了解了 BD-J 平台的功能,让我们更加深入一点,更加仔细看一看 API 的种类。

  BD-J 规范 API

  可以想象,BD-J 规范不是一下子发明的,它的确利用了很多其他在主页的平台/消费电子区域运营的 Java 规范。如果您记得图 1,消费电子的 Java 平台为 CDC (Connected Device Configuration)。在图 4 中,我们将看一看构成 BD-J 规范的 API 堆栈。

  使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序

  图 4:包含一些先前存在的 API 的 BD-J API 堆栈

  既然您对规范已经比较熟悉了,下面我们逐个包简要介绍特定的 BD-J 类。

  Blu-ray Java (BD-J) API

  

使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序
org.bluray.application此包包含一个类,该类扩展了一个 GEM/MHP 层的类。它包含多项功能,包括一个光盘插入和弹出的事件通知框架。
org.bluray.media此包包含符合蓝光媒体播放器的特定于媒体的类,并且它们扩展了 GEM/MHP 规范中的功能。这些类包含控制画中画 (Picture-in-Picture, PiP)、字幕和音频的机制。
org.bluray.net预先猜测一下,您可能以为此包包含所有从蓝光播放器建立 TCP/IP 网络连接所需的类。实际上,所有那些苦活儿都由 Personal Basis Profile 提供的 java.net 包完成。相反,此包包含一个扩展 Java TV API 的功能的类,以便为蓝光设备定义一个定位器 (Locator)。什么是定位器?它只是一个格式类似 URL 的文本字符串。在蓝光环境中,定位器用于在光盘上选择节目。
org.bluray.storage此包包含 3 个类,允许您确定蓝光播放器上的空闲存储空间总量。请注意:所有蓝光播放器上都必须要有永久存储区域,但不是所有播放器都必须要有虚拟文件系统(允许您存储大量数据,比如视频内容)。
org.bluray.system此包包含一个类,该类允许您访问蓝光播放器上的系统寄存器。
org.bluray.ti此包包含很多向您提供光盘上的节目信息和节目的元数据的类。
org.bluray.ui此包包含添加 Personal Basis Profile 中的 java.awt 包尚未提供的用户接口功能的类。这些类允许您添加一些花样,以及做一些与视频帧同步的动画。
org.bluray.vfs此包中的类允许您在虚拟文件系统中存储数据。虚拟文件系统并不是所有蓝光播放器必须要有的,但是在那些支持网络连接的播放器中存在。
使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序

  GEM 和 MHP API

  BD-J 规范绝对不是第一个对消费电子设备使用 Java 的规范。Multimedia Home Platform (MHP) 和 Globally Executable Multimedia Home Platform (GEM) 的规范定义了最初用于家庭的分线盒和其他多媒体设备的 API。由于 GEM 规范是一个全球标准,它已经得到了其他消费电子设备标准的运用,包括:

  Blu-ray Disc Java (BD-J)

  OpenCable Applications Platform (OCAP),现在叫做 Tru2way

  Advanced Common Application Platform (ACAP)

  在这篇文章中,我并不打算深入讨论整篇 GEM/MHP 平台。以下列表展示了构成 GEM/MHP API 的 Java 包,它包含在 BD-J 标准中。

  

使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序
org.davic.mediadvb.eventdvb.test
org.davic.netdvb.iodvb.ui
org.davic.resourcesdvb.langdvb.user
dvb.applicationdvb.mediahavi.ui
dvb.dsmccdVB.net
使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序

  Java TV 1.1 API

  回忆一下图 4,整个 BD-J 标准也使用来自 Java TV API 的功能。Java TV API 提供关键功能或 BD-J 应用程序,比如 Xlet 框架(稍后我将在本文中详细讨论),以及 javax.tv.service.Service 的类定义。对于具有 Java 功能的电视机和机顶盒(包含电缆接收机和 DVR),一项服务就是一个频道。所以,举例来说,如果您想要编写一个简单的应用程序,该应用程序为您启用 Java 的 DVR 安排节目,使其每天下午 4:00 调谐到 203 频道,那么您需要使用 javax.tv.service 包中的类来完成该任务。现在,对于蓝光设备来说,一个 javax.tv.service.Service 就是一个光盘节目。以下是一个 Java TV API 中的包的完整列表:

  

使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序
javax.tv.graphicsjavafx.tv.service
javax.tv.locatorjavafx.tv.util
javax.tv.mediajavafx.tv.xlet
javax.tv.net
使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序

  Personal Basis Profile,Foundation Profile 以及 Connected Device Configuration API

  Personal Basis Profile (PBP)、Foundation Profile (FP) 以及 Connected Device configuration (CDC) 一起构成了另一个上一层 API 为嵌入的和消费电子设备利用的基础。这些类提供了桌面 Java 程序员已经非常熟悉的 Java SE 类。这些类不等同于整个 JDK 1.6 标准 (Java SE 6),但是它们与 Java SE 1.3 标准非常相似,只有少数例外。这些是 JDBC、Swing 和假设用户输入包含定点设备(即鼠标)的高级 AWT 小部件的省略。现在,您应该知道由于此平台是 Java ME(而不是 Java SE),那么您也可以访问同样在具有 Java 功能的手机中包含的 javax.microedition.io 类。以下是 PBP、FP 和 CDC API 中所包含类的列表:

  

使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序
java.awtjava.mathjava.text
java.beansjava.netjava.util
java.iojava.rmijavax.microedition.io
java.langjava.securityjavax.microedition.xlet
使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序

  理解蓝光配置文件

  让我们回顾一下在市场上的播放器上实现的不同版本的蓝光光盘规范。

  发布的第一版蓝光光盘规范为 profile 1.0。

  下一个版本为 Blu-ray Disc Profile 1.1,也叫做 “Bonus View”。在 Blu-ray Profile 1.1 中,该规范要求支持画中画 (Picture-in-Picture, PiP) 并且拥有虚拟文件系统,这至少需要能够存储 256 MB 数据。

  最新的版本是 profile 2.0,也叫做 “BD-Live”。此配置文件拥有 Profile 1.1 中的所有功能,并且增加了对 Internet 连接的需要。Profile 2.0 还要求虚拟文件系统至少能够存储 1 GB 数据。现在,由于单层蓝光光盘可容纳 25 GB 数据,您可以看到 Profile 2.0 设备中的虚拟文件系统无法容纳整部电影。但是,它完全足够您的应用程序利用 Internet 连接,以及存储一些高清视频内容稍后进行回放。

  Xlet 和 Xlet 生命周期

  如果您曾经用过一段时间 Java,那么您应该熟悉 *let 命名约定,该约定适用于 Applet、Servlet 和 MIDlet。值得欣慰的是,CDC 平台上的应用程序不叫做 CDClet,而叫做 Xlet,因为没人能找到一个更好的名字。

  要创建一个 BD-J 应用程序,至少需要在一个类中实现 javax.tv.xlet.Xlet 接口,该接口来自 Java TV API。如果您熟悉 Personal Basis Profile 中的类,那么您应该知道 Xlet 的定义也在 javax.microedition.xlet 包中。因此,要尽量减少构建 BD-J 应用程序时的麻烦,请一定要从 Java TV 包中导入 Xlet 类。

  现在,理解 BD-J Xlet 的生命周期就非常简单了。调用构造函数之后,您的 Xlet 将进入加载状态。除了构造函数之外,还需要调用 initXlet() 方法,该方法将把您的 Xlet 至于 Paused 状态,直到 startXlet() 方法被调用。如下面的图 5 所示,您的应用程序在销毁前可以多次在 Paused 和 Active 状态之间转换。因此,startXlet() 方法是存放允许您在执行实际工作前检查网络连接和其他重要资源的代码的理想场所。

  使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序

  图 5:Xlet 状态图

  既然我们已经解决了所有的初步工作,就让我们开始创建第一个应用程序吧。

  创建您的第一个 BD-J 应用程序

  在以下示例代码中,我在一个简单的应用程序中实现了所有的 Xlet 生命周期方法,并且执行了一个非常简单的操作:在屏幕上书写文本。

  清单 1:FirstBDJApp.java

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;
}
}

  如您所见,我们并没有使用任何高级 widget 在屏幕上绘制文本。我们只是计算了该文本应该占据的面积,并使用 Graphics 对象在显示器上绘制文本。图 6 显示了我们的应用程序在 PS3 游戏主机上的运行情况。

  使用 Java ME 开发蓝光盘应用程序,第一部分:创建您的第一个应用程序

  图 6:FirstBDJApp.java 在 PS3 游戏机上的效果结束语现在,已经了解了如何创建可以在任何蓝光播放器上运行的 BD-J 应用程序。从 BD-J API 中可以看到,我们介绍的内容仅仅是冰山一角。在第二部分中,我们将更加详细地介绍如何获得创建 BD-J 应用程序的开发环境。我们也将提供有关如何响应遥控器的用户输入的示例代码。

(责任编辑:admin)

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号