BD-J

BD-J, or Blu-ray Disc Java, is a specification supporting Java ME (specifically the Personal Basis Profile of the Connected Device Configuration or CDC) Xlets for advanced content on Blu-ray Disc and the Packaged Media profile of Globally Executable MHP (GEM).
BD-J allows bonus content on Blu-ray Disc titles to be far more sophisticated than bonus content provided by standard DVD, including network access, picture-in-picture and access to expanded local 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 the Blu-ray Disc Association. All Blu-ray Disc players supporting video content are required by the specification to support BD-J. Starting on October 31, 2007, all "new" players are required to have hardware support for the "Bonus View" features, but the players may require future firmware updates to enable the features. "BD Live" support is always optional for a BD player.
Sony's PlayStation 3 has been the "de facto" leader in compliance and support of BD-J. The PlayStation 3 added Blu-ray Profile 1.1 support with a firmware upgrade and was used to showcase BD-Live at CES 2008 in January.
Content development.
Content authors have a variety of development strategies available, including the use of traditional Integrated Development Environments (IDEs) like NetBeans or Eclipse, 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 supports Java 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. 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.
Because of the many different standards and components involved, creating unified documentation on BD-J has proven to be a challenge.
Sample code.
The BD-J environment is designed to run Xlets with non- packages available to take advantage of the features particular to this platform beyond that defined by Java TV.
Even a simple example such as FirstBDJApp.
A developer might choose to use not packages and instead use:
A working example of a program using some features from each of the class trees would be the BdjGunBunny Xlet (a very simple version of Space Invaders using an image of a rabbit as the shooter and turtles as the targets) provided as an example in the Java ME 3.0 SDK.
import javax.tv.xlet.XletContext;
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import java.awt.Container;
import javax.tv.graphics.TVContainer;
// Getting a container for the screen could be
public void initXlet(XletContext context) {
// Java TV API to be compatible with Java TV
TVContainer scene = TVContainer.getRootContainer(context);
// Or for BD-J, to utilize HAVi features not available in Java TV
HScene scene = HSceneFactory.getInstance().getDefaultHScene();
// Or perhaps more generally...
Container container = null;
boolean realBDJ = true;
if (realBDJ)
 container = HSceneFactory.getInstance().getDefaultHScene();
else
 container = TVContainer.getRootContainer(context);
and the same for the other non- packages. Likewise, when trying to play a video, one might call the Blu-ray and DAVIC utility rather than using generic JMF:
import javax.media.Player;
import org.bluray.net.BDLocator;
import org.davic.media.MediaLocator;
 MediaLocator stars = new MediaLocator(new BDLocator("bd://0.PLAYLIST:00003"));
 Player player = Manager.createPlayer(stars);
// Rather than traditional and portable but more limited pure JMF
import java.net.URL;
import javax.media.Manager;
import javax.media.Player;
 Player mediaPlayer = Manager.createRealizedPlayer( new URL("file:/mymovie.mov" ));