Movie PlayList中の指定した再生時刻でイベントを受け取るサンプルコード。
Programming HD DVD and Blu-ray Discによると、本APIにはプレーヤー間の非互換性があるとのことなので、そのことを踏まえた上で使用してください。
JMF Controlの1つであるorg.davic.media.MediaTimeEventControlを利用したものであり、概要は以下のとおりである。
- Controlの取得:Movie PlayListを再生するJMF Playerからorg.davic.media.MediaTimeEventControlを取得
- Listenerの実装:イベントを受け取るinterfaceであるorg.davic.mediaMediaTimeListenerを実装
- Listenerの登録:取得したMediaTimeEventControlに対し、2で実装したlistenerと発生時刻とを指定。なお、発生時刻の指定は、Movie PlayListの先頭を0として、1ナノ秒(1秒の1/(10^9))の精度。
- Listenerの登録解除:3で指定した発生時刻に-1をかけた値を指定する(一部のプレーヤーでは動作しない機能。なお、PS3は動作)
Main.java
import javax.media.Control;
import javax.media.Manager;
import javax.media.Player;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import org.bluray.net.BDLocator;
import org.davic.media.MediaLocator;
import org.davic.media.MediaTimeEvent;
import org.davic.media.MediaTimeEventControl;
import org.davic.media.MediaTimeEventListener;
public class Main implements Xlet, MediaTimeEventListener {
private MediaTimeEventControl control;
public void initXlet(XletContext context){
try {
BDLocator loc = new BDLocator("bd://1.PLAYLIST:00000");
MediaLocator ml = new MediaLocator(loc);
Player player = Manager.createPlayer(ml);
control = (MediaTimeEventControl)player.getControl("org.davic.media.MediaTimeEventControl");
control.notifyWhen(this, 1000000000L, 0); // 1秒後
control.notifyWhen(this, 2000000000L, 1); // 2秒後
control.notifyWhen(this, 5000000000L, 2); // 5秒後
control.notifyWhen(this, 10000000000L, 3); // 10秒後
player.start();
} catch(Throwable thr) {
}
}
public void startXlet(){ }
public void pauseXlet(){ }
public void destroyXlet(boolean unconditional){
try {
control.notifyWhen(this, -1000000000L, 0);
control.notifyWhen(this, -2000000000L, 1); // 2秒後
control.notifyWhen(this, -5000000000L, 2); // 5秒後
control.notifyWhen(this, -10000000000L, 3); // 10秒後
} catch(Throwable thr) {
}
}
// MediaTimeEventListnerを実装するmethod
public void receiveMediaTimeEvent(MediaTimeEvent e) {
system.out.println( Integer.toString(e.getEventId())+":"+Long.toString(e.getEventTime()) );
}
}
関連する項目
- Programming HD DVD and Blu-ray Disc
- Movie PlayListの再生
- GEM 1.0.3: A.2.1にlistenerをunregistする方法が記載されている