现在是成为 Java 开发人员的大好时机。根据 JavaOne 2008 大会提供的最新统计数据,全世界部署了超过六十亿支持 Java 功能的设备。这些设备涵盖了从大型企业级服务器到可以放入皮夹中的微型智能卡的各种设备。Java 技术已经被嵌入到数以亿计的电话,以及包括传统台式机在内的无数其他设备中:图 1 显示了现有的各种 Java 平台)。
图 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 显示了一个在我的膝上电脑上运行的工具的屏幕截图。
图 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 开发人员来说是很好的资源)提供的示例代码呈现的菜单。
图 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 堆栈。
图 4:包含一些先前存在的 API 的 BD-J API 堆栈 既然您对规范已经比较熟悉了,下面我们逐个包简要介绍特定的 BD-J 类。 Blu-ray Java (BD-J) API
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 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 中的包的完整列表:
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 中所包含类的列表:
理解蓝光配置文件 让我们回顾一下在市场上的播放器上实现的不同版本的蓝光光盘规范。 发布的第一版蓝光光盘规范为 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() 方法是存放允许您在执行实际工作前检查网络连接和其他重要资源的代码的理想场所。
图 5:Xlet 状态图 既然我们已经解决了所有的初步工作,就让我们开始创建第一个应用程序吧。 创建您的第一个 BD-J 应用程序 在以下示例代码中,我在一个简单的应用程序中实现了所有的 Xlet 生命周期方法,并且执行了一个非常简单的操作:在屏幕上书写文本。 清单 1:FirstBDJApp.java
如您所见,我们并没有使用任何高级 widget 在屏幕上绘制文本。我们只是计算了该文本应该占据的面积,并使用 Graphics 对象在显示器上绘制文本。图 6 显示了我们的应用程序在 PS3 游戏主机上的运行情况。
图 6:FirstBDJApp.java 在 PS3 游戏机上的效果结束语现在,已经了解了如何创建可以在任何蓝光播放器上运行的 BD-J 应用程序。从 BD-J API 中可以看到,我们介绍的内容仅仅是冰山一角。在第二部分中,我们将更加详细地介绍如何获得创建 BD-J 应用程序的开发环境。我们也将提供有关如何响应遥控器的用户输入的示例代码。 (责任编辑:admin) |