BD-J

**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 지원을 추가했다.

## BD-J Xlet 기능
* BD-J Xlet 호출은 주변에서 발생하는 이벤트에 의해 트리거된다. 예를 들어, 영화 제목을 선택하거나 새 디스크를 삽입하는 경우이다. Xlet은 차례로 다른 Xlet을 호출할 수 있다.
* BD-J의 보안은 자바 플랫폼 보안 모델을 기반으로 한다. 즉, JAR에 서명된 응용 프로그램은 서명되지 않은 응용 프로그램보다 더 많은 작업을 수행할 수 있다. 예를 들어, 로컬 저장소에 대한 읽기/쓰기 액세스, 네트워크 액세스, BD-ROM 디스크의 다른 타이틀 선택, 다른 실행 중인 BD-J 응용 프로그램 제어 등이 있다.
* Xlet(CDC 개인 기본 프로필의 일부)에는 GUI가 없으므로(즉, 과 같은 AWT 위젯이 없음) 애니메이션 및 GUI 생성을 위한 추가 클래스가 사용된다. BD-J는 원격 제어 사용을 위해 하비 UI 장치 모델 및 위젯 세트를 사용하지만, BD에서 지원하는 해상도 및 BD에서 지원하는 A/V 제어를 허용하도록 확장되었다.
* BD-J에는 사용자가 영화의 특정 프레임에 정확하게 동기화할 수 있도록 하는 클래스가 있다.
* 허용되는 비디오 동기화에는 두 가지 유형이 있다. 하나는 콜백 메서드를 사용하고 이벤트의 몇 프레임 이내로 정확한 "느슨한 동기화(loose synchronization)"이고, 다른 하나는 패키지 를 사용하는 "정밀 동기화(tight synchronization)"이다. 정밀 동기화는 응용 프로그램이 JMF(자바 미디어 프레임워크)의 패키지 에서 타임코드를 사용하여 정확한 프레임에 동기화할 수 있도록 한다.
* BD-J 응용 프로그램의 GUI는 필수 키 세트와 선택적인 포인팅 장치가 있는 원격 제어로 조작할 수 있다. 필수 키 세트에는 고선명 영화(HDMV) 응용 프로그램의 사용자 작업을 지원하는 데 필요한 최소한의 키가 포함된다.
* BD-J의 GUI 프레임워크에는 GEM에서 의무화한 HAVi(6) UI 프레임워크가 포함되어 있다. 이는 스윙이나 AWT와 같은 데스크톱 GUI 프레임워크가 아니다. GUI 프레임워크는 PBP에서 지정한 AWT 코어를 기반으로 하지만, 위젯 세트에는 GEM의 원격 제어 탐색 및 HAVi의 모양 및 느낌을 쉽게 사용자 지정할 수 있는 메커니즘이 포함되어 있다.
* BD-J에는 BD-ROM 디스크와 관련된 미디어 콘텐츠 재생을 위한 JMF와 유사한 미디어 프레임워크가 포함되어 있다. BD-ROM 디스크가 미디어 파일의 주요 소스가 될 것으로 가정하지만, 유일한 소스는 아닐 것이다. 다른 소스는 스튜디오의 웹 서버 및 로컬 저장소가 될 수 있다.
* BD-J에는 JPEG (JFIF), PNG 및 기타 이미지 형식으로 이미지를 디코딩하고 표시하기 위한 표준 자바 라이브러리가 포함되어 있다. 이러한 이미지는 표준 자바 그래픽 함수를 사용하여 자바 그래픽 평면에 표시할 수 있다. 이미지는 BD-J 특정 패키지를 사용하여 배경 평면에 렌더링할 수도 있다.
* 텍스트는 표준 자바 텍스트 함수를 사용하여 렌더링할 수 있다. 이러한 텍스트 렌더링 함수는 BD-J UI 프레임워크와 통합되는 고급 텍스트 레이아웃 관리자로 확장된다. 텍스트는 디스크, 플레이어(기본 글꼴) 또는 네트워크에서 다운로드한 벡터 기반 글꼴을 사용하여 렌더링된다.
* HDMV의 버튼 사운드도 자바 UI 프레임워크에서 사용할 수 있다. 사운드 파일은 사용자가 키를 누르는 것에 대한 반응으로, 또는 영화와 관련된 표시된 이벤트에 대한 반응으로, 또는 BD-J 응용 프로그램에 의해 생성된 모든 이벤트에 대한 반응으로 로드 및 렌더링될 수 있다.
* 인증된 응용 프로그램은 (서명된) 권한 요청 파일을 사용하여 BD-J 샌드박스를 넘어선 권한을 획득할 수 있다. 다음과 같은 권한을 획득할 수 있다.
** 로컬 및 시스템 저장소에 대한 읽기 및 쓰기
** 네트워크 연결 사용 (정의된 서버에 연결)
** BD-ROM 디스크의 파일 시스템 액세스
** BD-ROM 디스크의 다른 타이틀 선택
** 다른 실행 중인 BD-J 응용 프로그램 제어
* BD-J 응용 프로그램은 인터넷 서버에 연결하기 위해  패키지를 사용할 수 있다. 물리적 연결은 구현에 따라 다를 수 있다(예: 이더넷, 전화선 등). 네트워크 수준에서는 TCP/IP가 지원되며 HTTP 프로토콜이 사용될 수 있다. 또한, 보안 연결을 위한 자바 패키지(JSSE)는 BD-J 플랫폼의 일부로 포함되어 있다. BD-J 응용 프로그램이 네트워크 연결을 사용하려면 인증되고 네트워크를 사용할 적절한 권한이 있어야 한다.
* 응용 프로그램이 접속할 웹사이트는 콘텐츠 공급자가 완전히 제어한다. 이 제어는 두 가지 방식으로 보장된다.
** 디스크가 재생될 때 (디스크) 인증된 BD-J 응용 프로그램만 실행할 수 있다. 응용 프로그램이 네트워크 연결 사용을 제어한다.
** 또한, 디스크에 정의된 권한은 (TCP/IP) 네트워크 연결 사용을 특정 사이트로 제한할 수 있다.
* BD-J에는 저장소 지원이 포함된다. 두 가지 종류의 저장소가 포함된다: 필수 시스템 저장소와 선택적 로컬 저장소. 모든 저장소는 자바 IO 패키지의 메서드를 사용하여 액세스된다. 로컬 저장소의 경로는 [GEM]에 지정된 대로이다.
* 시스템 저장소는 모든 BD-J 플레이어에 존재하는 저장소이다. 이 시스템 저장소의 최소 필수 크기는 설정, 최고 점수 등과 같은 응용 프로그램 데이터를 저장할 수 있도록 허용한다. 다운로드된 AV 자료를 저장할 만큼 크지는 않을 것이다. 이 목적으로 선택적 로컬 저장소가 제공된다. 일반적으로 시스템 저장소는 플래시 메모리를 사용하여 구현되고 선택적 로컬 저장소는 HDD에 구현된다.
* 저장소는 플레이어에서 재생되는 모든 디스크 간에 공유되는 리소스이므로, 자바 액세스 제어는 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에서 정의된 것 외에 이 플랫폼의 특정 기능을 활용하기 위해 비- 패키지를 사용할 수 있다.

FirstBDJApp와 같은 간단한 예시도 있다.

개발자는  패키지 대신 다음을 사용할 수 있다.
# 패키지 트리 에 있는 HAVi 클래스: 예를 들어, 에서 제공하는 것보다 훨씬 더 많은 기능을 제공하는 을 얻기 위한 대안 클래스 (둘 다 의 확장이다)
# 패키지 트리 에 있는 디지털 비디오 브로드캐스팅 (DVB) 클래스: 예를 들어, 대중적인 CDC 장치에 특정한 키 누름 및 키 코드 지원을 위한  인터페이스 대신  인터페이스와 같은 대안 클래스
# 패키지 트리 에 있는 블루레이 디스크 클래스: 팝업 메뉴와 같은 BD-J 플랫폼의 특이한 추가 이벤트를 인식하고 블루레이 디스크에서 미디어를 찾기 위해 DAVIC 및 DVB 클래스가 의존한다.
# 패키지 트리 에 있는 DAVIC API 클래스: JMF 범위를 넘어선 로케이터 및 특수 예외(예: 콘텐츠 인증)를 위해 HAVi, DVB 및 블루레이 클래스가 사용하는 대화형 TV에 특이한 다른 네트워크 및 미디어 리소스를 래핑하거나 확장하는 작은 클래스 세트

각 클래스 트리의 일부 기능을 사용하는 작동하는 프로그램의 예는 자바 ME 3.0 SDK에서 예시로 제공되는 BdjGunBunny Xlet (토끼 이미지를 슈터로, 거북이를 타겟으로 사용하는 매우 간단한 스페이스 인베이더 버전)이다.


```java
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);
...
}
```


다른 비- 패키지도 마찬가지이다. 마찬가지로 비디오를 재생하려고 할 때 일반 JMF를 사용하는 대신 블루레이 및 DAVIC 유틸리티를 호출할 수 있다.


```java
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" ));
```


## 관련 출판물
* Programming HD DVD and Blu-ray Disc The HD Cookbook (2008) by Michael Zink, Philip C. Starner, Bill Foote -  - book website 

## 같이 보기

* 고급 콘텐츠, HD DVD의 BD-J 상대

## 각주

## 외부 링크
* 공식 java.net BD-J 포럼 - 블루레이 디스크 자바를 위한 공식 Sun java.net 포럼.
* bdjforum.com - BD-J 개발자 및 HD 저작권 관련 문제에 대한 비공식 포럼.
* 자바원 2007 기술 세션: 할리우드를 위한 블루레이 자바 소프트웨어 타이틀 제작
* DVB-MHP 및 DVB-GEM 공식 웹사이트 - 대화형 TV를 위한 개방형 미들웨어
* 국경 없는 TV - 스티븐 모리스의 MHP/OCAP 웹사이트.
* HD 쿡북 - 블루레이 자바, GEM, MHP 및 OCAP을 위한 코드 및 기타 레시피
* 알티캐스트 BD-J 솔루션

분류:영상 저장 매체
분류:자바 플랫폼
분류:고선명 텔레비전
분류:블루레이 디스크