BD-J, orBlu-ray Disc Java, is a specification supportingJava ME (specifically the Personal Basis Profile of theConnected Device Configuration or CDC)Xlets for advanced content onBlu-ray Disc and the Packaged Media profile ofGlobally Executable MHP (GEM).
BD-J allows for more sophisticated bonus content on Blu-ray Disc titles than standardDVD, including network access, picture-in-picture, and access to expandedlocal storage. Collectively, these features (other than internet access) are referred to as "Bonus View", and the addition of internet access is called "BD Live". BD-J was developed by theBlu-ray Disc Association. All Blu-ray Disc players supporting video content are required by the specification to support BD-J.[1] Starting on October 31, 2007, allnew players are required to have hardware support for the "Bonus View" features, but the players may require future firmware updates to enable the aforementioned features. "BD Live" support is always optional for a BD player.[2]
Sony'sPlayStation 3 has been thede facto leader in compliance and support of BD-J, adding Blu-ray Profile 1.1 support with a firmware upgrade used to showcase BD-Live at CES 2008.
java.awt.Button
), so additional classes are called into play for generating animation and GUI. The BD-J uses theHavi UI device model and widget set for remote control use, but it is extended to allow for the BD supported resolutions and BD supported A/V controls.org.bluray
. Tight synchronization allows applications to synchronize accurately to the exact frame using timecodes from the packagejavax.media.Time
of JMF (Java Media Framework).java.net
package to connect to servers on the Internet. The physical connection might differ between implementations e.g. Ethernet, telephone line, etc. At the network level,TCP/IP is supported and theHTTP protocol may be used. Moreover, the Java package for secure connections is included (JSSE) as part of the BD-J platform. Before a BD-J application can use the network connection, it must be authenticated and have suitable permission to use the network.Content authors have a variety of development strategies available, including the use of traditionalIntegrated Development Environments (IDEs) likeNetBeans orEclipse, non-programming graphical environments similar to Macromedia Director, or via rendering engines which consume standard data formats such as HTML, XML, or SVG. Having a full programming environment available on every Blu-ray Disc player provides developers with a platform for creating content types not bound by the restrictions of standard DVD. In addition to the standard BD-J APIs, developers may make use of existing Java libraries and application frameworks, assuming they do not use features outside the constraints of the BD-J platform, include that Java ME only supportsJava version 1.3 class files.
A set of freely available tools that allow Java developers to produce complete disc images incorporating BD-J is available from the HD Cookbook Project.[3] In order to test content in a typical development environment (MS Windows), one needs either a PlayStation 3 or a third-party software player for Windows, paying attention to player versions to ensure that the player supports BD-J.[4][5][6]
Because of the many different standards and components involved, creating unified documentation on BD-J has proven to be a challenge.[7][8]
The BD-J environment is designed to runXlets with non-javax.*
packages available to take advantage of the features particular to this platform beyond that defined byJava TV.
Even a simple example such as FirstBDJApp.[9]
A developer might choose to use notjavax.*
packages and instead use:
org.havi.*
: alternative classes to obtain, for example, anorg.havi.ui.HScene
far beyond what is provided byjavax.tv.graphics.TVContainer
(they are both extensions ofjava.awt.Container
)org.dvb.*
: alternative classes to, for example, theorg.dvb.event.UserEventListener
interface rather thanjava.awt.event.KeyListener
for support for key presses and keycodes specific to popular CDC devices.org.bluray.*
: the DAVIC and DVB classes depend upon to recognize additional events peculiar to the BD-J platform such as popup menus and to locate media on the Blu-ray disc.org.davic.*
: A small set of classes wrapping or extending other network and media resources peculiar to interactive TV the HAVi, DVB and Blu-ray classes use for locators and specialized exceptions beyond the realm of JMF (such as content authorization).A working example of a program using some features from each of the class trees would be the BdjGunBunny Xlet (a very simple version ofSpace Invaders using an image of a rabbit as the shooter and turtles as the targets) provided as an example in theJava ME 3.0 SDK.
importjavax.tv.xlet.XletContext;importorg.havi.ui.HScene;importorg.havi.ui.HSceneFactory;importjava.awt.Container;importjavax.tv.graphics.TVContainer;// Getting a container for the screen could bepublicvoidinitXlet(XletContextcontext){// Java TV API to be compatible with Java TVTVContainerscene=TVContainer.getRootContainer(context);// Or for BD-J, to utilize HAVi features not available in Java TVHScenescene=HSceneFactory.getInstance().getDefaultHScene();// Or perhaps more generally...Containercontainer=null;booleanrealBDJ=true;if(realBDJ)container=HSceneFactory.getInstance().getDefaultHScene();elsecontainer=TVContainer.getRootContainer(context);...}
And the same for the other non-javax.*
packages. Likewise, when trying to play a video, one might call the Blu-ray and DAVIC utility rather than using generic JMF:
importjavax.media.Player;importorg.bluray.net.BDLocator;importorg.davic.media.MediaLocator;MediaLocatorstars=newMediaLocator(newBDLocator("bd://0.PLAYLIST:00003"));Playerplayer=Manager.createPlayer(stars);// Rather than traditional and portable but more limited pure JMFimportjava.net.URL;importjavax.media.Manager;importjavax.media.Player;PlayermediaPlayer=Manager.createRealizedPlayer(newURL("file:/mymovie.mov"));