Getting Started

Introduction

The Blu-ray platform is unique and has its own advantages compared compared to PC and video game consoles. Coding a Blu-ray application or video game is about knowing the limitations, and taking advantage of the options you have. Limitations breed creativity. This guide is for hobbyists and developers interested in creating custom Blu-ray applications and games, not just standard movie playback. Blu-ray applications uses the Blu-ray disc.

 

Blu-ray Overview


Blu-ray is a 32-bit multimedia platform for high definition movies, surround sound music, interactive video games and applications. A Blu-ray application (BDMV) uses two interactive modes, HDMV and BD-J, HDMV is primary for movie titles, while BD-J is primary for advanced titles such as video games or movies with fancy menus.


Blu-ray Platform Overview


 

Coding/Programming

HDMV apps are programed using static navigation commands using GPRs and PSRs. BD-J apps uses the Java programing language, but since BD-J is based on Java ME, it's restricted to Java 1.3. Optionally, XML can be used with Java in BD-J via parsing.

 

Media Codecs

 

Controls

    See: Controller 

 

Limitations

The Blu-ray format comes with limitations such as memory constraints, so you need to be creative and conservative.

    See: Memory & Limitations 

 

BD-J Build Tools

To compile your BD-J project, you simply need to link the BDJ.jar file and configure javac to use 1.3 for both source and target compatibility. Strictly speaking, the official procedure requires gathering various stub files from multiple vendors and assembling them to create the BDJ.jar file yourself. 

However, this "proper" protocol is no longer practical because many of those original stub files have disappeared from the internet, rendering most online tutorials obsolete. Fortunately, you can bypass this process by sourcing a pre-built BDJ.jar from modern alternatives, such as the Minimal BD-J SDK or the internal files of media player software like CyberLink PowerDVD.

Once you have the BDJ.jar, integrate it into your compilation process by adding it to your classpath. You can use the following javac command to target the appropriate environment:
javac -source 1.3 -target 1.3 -cp path/to/bdj.jar path/to/sourcefiles/*.java 

After successful compilation, you must package your class files into a JAR file. Note that BD-J applications specifically require a "permission request file" (typically an XML-based PRF) to be included within this JAR for proper execution on Blu-ray players. Detailed specifications for this file can be found in the documentation of the minimal BD-J SDK🔗.

Because you are using a standalone JAR rather than an official development kit, you will not have access to native BD-J Javadocs. However, since the platform is based on Java 2 SE v1.3.1, you can use standard Java 1.3 documentation for most general tasks. For specialized BD-J API calls, your best resource is to examine the source code of established BD-J projects.

You can use commercial products for Blu-ray application development:

  • Scenarist BD: Top class professional authoring software for Blu-ray and UltraHD Blu-ray. $$$
  • Adobe Encore: Discontinued. Professional Blu-ray disc authoring. HDMV only.
  • Blu-Disc: Cheaper alternative to Scenarist, supports both BD-J and HDMV. 

Free Blu-ray professional authoring:

  • BDedit 🔗: Professional editor, supports HDMV programming, but BD-J programming must be compiled using a different program. Old version free, but newest version requires donation payment. 
  • BD-J SDK for Linux ðŸ”—: Free and open-source SDK for building BD-J ISO images on GNU/Linux 

 

Test Tools

For testing you can use hardware media players or emulators. Simply open the Blu-ray folder or ISO file.

Emulators & Players for Testing 

  • CyberLink PowerDVD: Windows only, has the strongest accuracy and reliability for development/testing. $100
  • JRiver Media Center: Cross-platform, with solid menu/BD-J support on Windows As of Version M24, Secondary Video/Audio is not supported yet. $124
  • VLC Player: Not recommended for full testing due to bugs and compatibility issues with BD-J. HDMV support is "mostly" fine but with limited controls. Secondary Video/Audio not supported. Free

Hardware Players for Testing

  • Dune HD Pro Vision 4K Solo/Real Vision 4K: Offers best-in-class BD-J support (BonusView, BD-Live), fast playback from either BD ISO files or BDMV folders via local drives (USB/SATA) or network (SMB/NFS).
  • Dune HD Max (or older Signma-based models): Built-in optical drive + strong BD-J for both physical discs and full structures (ISO/BDMV folders) from HDD/Network. Full support for menus, BonusView and BD-Live, solid for hardware accurate testing. However, newer models are much faster.
  • Oppo UDP-203/205 (or clones): Supports BDMV folders, but requires placing the folder structure inside an "AVCHD" folder (uppercase exact spelling) for network shares (SMB/NFS) or USB. BD ISO files are not supported unless jail broken. Unsupported models can also be jail broken, see: https://www.oppo-jb.com/🔗

You can connect a computer to a compatible Blu-ray player via SMB/NFS to run and test your BD app, and easily edit BDMV folders.

 

BD-J Signing

It's necessary to sign your Xlet for a simple app/game; signing is only necessary when/if you want to:

  • Access files on the disc (outside the JAR)
  • Use network (e.g. for online highscores, or for a secondary WiFi device)

Meaning you don't have to worry about signing at all at first. It is something you can look into later - if needed. Your application or game will run fine without signing it.

 

 

BD-J Hello World

Here's a short "Hello World" example from Blu-Play.com

Example Code "Hello World"

package com.bluplay.helloworld;

public class HelloWorld extends java.awt.Container implements javax.tv.xlet.Xlet {

  private org.havi.ui.HScene scene;
  private java.awt.Font font;

  public void initXlet(javax.tv.xlet.XletContext context) {
    setSize(1280, 720);
    scene = org.havi.ui.HSceneFactory.getInstance().getDefaultHScene();
    scene.add(this);
    scene.validate();
  }

  public void startXlet() {
    setVisible(true);
    scene.setVisible(true);
    repaint();
  }

  public void pauseXlet() {
    setVisible(false);
  }

  public void destroyXlet(boolean unconditional) {
    scene.remove(this);
    scene = null;
  }

  public void paint(java.awt.Graphics g) {
    g.setColor(new java.awt.Color(0x000000));
    g.fillRect(0, 0, getWidth(), getHeight());
    g.setColor(new java.awt.Color(0xffffff));
    if (font == null) {
      font = new java.awt.Font(null, java.awt.Font.PLAIN, 30);
      g.setFont(font);
    }
    g.drawString("Hello World!", 50, 50);
  }
}

This code was written by Mistalu from Blu-Play.com🔗

 

HDMV Code Example

Here's a short example of HDMV commands in a Movie Object file. 

Example Code 

00000000 4D 4F 42 4A 30 32 30 30 00 00 00 00 00 00 00 00
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000020 00 00 00 00 00 00 00 00 00 00 00 26 00 00 00 00
00000030 00 02 00 00 00 01 21 81 00 00 00 00 00 01 00 00
00000040
00 00 00 00 00 01 21 81 00 00 00 00 00 01 00 00
00000050
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000060
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Here's the same commands in it's hexadecimal values (colored).

Example Code 

[21810000,00000001 ,00000000]  Jump Title 1 
[21810000,00000001 ,00000000]  Jump Title 1

The Jump Title 1 command jumps to the BDMV application's Title. This is useful for making a simple BD-J title. A single BD-J title is located in the BD-J Object file and will execute a Java Xlet.

 

 

 

 

 

 

0 responses to “Getting Started”

Leave a Reply

Popular Pages