BD-J 또는 블루레이 디스크 자바(Blu-ray Disc Java)는 자바 ME (특히 연결 장치 구성 또는 CDC의 개인 기본 프로필) Xlet을 지원하는 사양으로, 블루레이 디스크의 고급 콘텐츠와 GEM (Globally Executable MHP)의 패키지 미디어 프로필을 위한 것이다.
BD-J는 네트워크 액세스, 픽처 인 픽처, 확장된 로컬 저장소 액세스를 포함하여 표준 DVD보다 더 정교한 보너스 콘텐츠를 블루레이 디스크 타이틀에 허용한다. 이러한 기능(인터넷 액세스 제외)을 통칭하여 "보너스 뷰(Bonus View)"라고 하며, 인터넷 액세스가 추가된 것을 "BD 라이브(BD Live)"라고 한다. BD-J는 블루레이 협회에서 개발했다. 비디오 콘텐츠를 지원하는 모든 블루레이 디스크 플레이어는 사양에 따라 BD-J를 지원해야 한다. 2007년 10월 31일부터 모든 신규 플레이어는 "보너스 뷰" 기능을 위한 하드웨어 지원이 필요하지만, 플레이어는 위에 언급된 기능을 활성화하기 위해 향후 펌웨어 업데이트가 필요할 수 있다. "BD 라이브" 지원은 BD 플레이어에서 항상 선택 사항이다.
소니의 플레이스테이션 3는 BD-J 규정 준수 및 지원에서 사실상의 선두 주자였으며, CES 2008에서 BD-Live를 선보이기 위해 사용된 펌웨어 업그레이드를 통해 블루레이 프로필 1.1 지원을 추가했다.
java.awt.Button과 같은 AWT 위젯이 없음) 애니메이션 및 GUI 생성을 위한 추가 클래스가 사용된다. BD-J는 원격 제어 사용을 위해 하비 UI 장치 모델 및 위젯 세트를 사용하지만, BD에서 지원하는 해상도 및 BD에서 지원하는 A/V 제어를 허용하도록 확장되었다.org.bluray를 사용하는 "정밀 동기화(tight synchronization)"이다. 정밀 동기화는 응용 프로그램이 JMF(자바 미디어 프레임워크)의 패키지 javax.media.Time에서 타임코드를 사용하여 정확한 프레임에 동기화할 수 있도록 한다.java.net 패키지를 사용할 수 있다. 물리적 연결은 구현에 따라 다를 수 있다(예: 이더넷, 전화선 등). 네트워크 수준에서는 TCP/IP가 지원되며 HTTP 프로토콜이 사용될 수 있다. 또한, 보안 연결을 위한 자바 패키지(JSSE)는 BD-J 플랫폼의 일부로 포함되어 있다. BD-J 응용 프로그램이 네트워크 연결을 사용하려면 인증되고 네트워크를 사용할 적절한 권한이 있어야 한다.콘텐츠 저작자는 넷빈즈나 이클립스와 같은 기존의 통합 개발 환경 (IDE), 매크로미디어 디렉터와 유사한 비프로그래밍 그래픽 환경, 또는 HTML, XML, SVG와 같은 표준 데이터 형식을 사용하는 렌더링 엔진을 포함하여 다양한 개발 전략을 사용할 수 있다. 모든 블루레이 디스크 플레이어에서 완전한 프로그래밍 환경을 사용할 수 있다는 것은 개발자에게 표준 DVD의 제한에 묶이지 않는 콘텐츠 유형을 만들 수 있는 플랫폼을 제공한다. 표준 BD-J API 외에도 개발자는 기존 자바 라이브러리 및 응용 프로그램 프레임워크를 사용할 수 있다. 단, BD-J 플랫폼의 제약 조건 외의 기능을 사용하지 않고, 자바 ME가 자바 버전 1.3 클래스 파일만 지원한다는 점을 포함한다.
HD 쿡북 프로젝트에서 자바 개발자가 BD-J를 통합한 완전한 디스크 이미지를 생성할 수 있도록 하는 무료 도구 세트를 제공한다. 일반적인 개발 환경(MS 윈도우)에서 콘텐츠를 테스트하려면 플레이스테이션 3 또는 윈도우용 타사 소프트웨어 플레이어가 필요하며, 플레이어가 BD-J를 지원하는지 확인하기 위해 플레이어 버전에 주의해야 한다.
많은 다양한 표준과 구성 요소가 관련되어 있기 때문에, BD-J에 대한 통합 문서를 만드는 것은 도전과제로 입증되었다.
BD-J 환경은 Xlet을 실행하도록 설계되었으며, 자바 TV에서 정의된 것 외에 이 플랫폼의 특정 기능을 활용하기 위해 비-javax.* 패키지를 사용할 수 있다.
FirstBDJApp와 같은 간단한 예시도 있다.
개발자는 javax.* 패키지 대신 다음을 사용할 수 있다.
org.havi.*에 있는 HAVi 클래스: 예를 들어, javax.tv.graphics.TVContainer에서 제공하는 것보다 훨씬 더 많은 기능을 제공하는 org.havi.ui.HScene을 얻기 위한 대안 클래스 (둘 다 java.awt.Container의 확장이다)org.dvb.*에 있는 디지털 비디오 브로드캐스팅 (DVB) 클래스: 예를 들어, 대중적인 CDC 장치에 특정한 키 누름 및 키 코드 지원을 위한 java.awt.event.KeyListener 인터페이스 대신 org.dvb.event.UserEventListener 인터페이스와 같은 대안 클래스org.bluray.*에 있는 블루레이 디스크 클래스: 팝업 메뉴와 같은 BD-J 플랫폼의 특이한 추가 이벤트를 인식하고 블루레이 디스크에서 미디어를 찾기 위해 DAVIC 및 DVB 클래스가 의존한다.org.davic.*에 있는 DAVIC API 클래스: JMF 범위를 넘어선 로케이터 및 특수 예외(예: 콘텐츠 인증)를 위해 HAVi, DVB 및 블루레이 클래스가 사용하는 대화형 TV에 특이한 다른 네트워크 및 미디어 리소스를 래핑하거나 확장하는 작은 클래스 세트각 클래스 트리의 일부 기능을 사용하는 작동하는 프로그램의 예는 자바 ME 3.0 SDK에서 예시로 제공되는 BdjGunBunny Xlet (토끼 이미지를 슈터로, 거북이를 타겟으로 사용하는 매우 간단한 스페이스 인베이더 버전)이다.
import javax.tv.xlet.XletContext;
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import java.awt.Container;
import javax.tv.graphics.TVContainer;
// 화면용 컨테이너를 가져오는 방법
public void initXlet(XletContext context) {
// Java TV와의 호환성을 위한 Java TV API
TVContainer scene = TVContainer.getRootContainer(context);
// 또는 Java TV에서 사용할 수 없는 HAVi 기능을 활용하기 위한 BD-J
HScene scene = HSceneFactory.getInstance().getDefaultHScene();
// 또는 더 일반적으로...
Container container = null;
boolean realBDJ = true;
if (realBDJ)
container = HSceneFactory.getInstance().getDefaultHScene();
else
container = TVContainer.getRootContainer(context);
...
}
다른 비-javax.* 패키지도 마찬가지이다. 마찬가지로 비디오를 재생하려고 할 때 일반 JMF를 사용하는 대신 블루레이 및 DAVIC 유틸리티를 호출할 수 있다.
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);
// 전통적이고 이식성이 좋지만 더 제한적인 순수 JMF 대신
import java.net.URL;
import javax.media.Manager;
import javax.media.Player;
Player mediaPlayer = Manager.createRealizedPlayer( new URL("file:/mymovie.mov" ));