Movie PlayListの再生速度を変更し、変更された場合にイベント(RateChangeEvent)を受信するサンプルコード。
setRateで指定する値が1が通常再生、0が一時停止となる。負の値を指定すると逆方向への再生となる。ただし、0と1以外は動作が保証されない。
RateChangeEventは、プログラムから再生速度を変更するときだけでなう、ユーザが一時停止や早送りをした場合も発生する。
setRateで指定する値が1が通常再生、0が一時停止となる。負の値を指定すると逆方向への再生となる。ただし、0と1以外は動作が保証されない。
RateChangeEventは、プログラムから再生速度を変更するときだけでなう、ユーザが一時停止や早送りをした場合も発生する。
Main.java
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.Manager;
import javax.media.Player;
import javax.media.RateChangeEvent;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import javax.tv.xlet.XletStateChangeException;
import org.bluray.net.BDLocator;
// 再生速度変更検出のためControllerListenerを実装
public class Main implements Xlet, ControllerListener {
public void initXlet(XletContext context){
try {
BDLocator loc = new BDLocator("bd://1.PLAYLIST:00000");
MediaLocator ml = new MediaLocator(loc);
Player player = Manager.createPlayer(ml);
// 本クラスをJMFプレーヤーにControllerListenerとして登録
player.addControllerListener(this);
// 一時停止
Thread.sleep(5000);
player.setRate(0F);
// 再生再開
Thread.sleep(5000);
player.setRate(1F);
// 逆再生
Thread.sleep(5000);
player.setRate(-1F);
} catch(Throwable thr) {
}
}
public void startXlet(){ }
public void pauseXlet(){ }
public void destroyXlet(boolean arg0) throws XletStateChangeException {}
// 再生速度変更検出のためControllerListenerを実装
public void controllerUpdate(ControllerEvent arg0) {
// RateChangeEventを抜き出す
if( arg0 instanceof RateChangeEvent ){
RateChangeEvent rce = (RateChangeEvent)arg0;
System.out.println("Rate="+Float.toString( rce.getRate() ) );
}
}
}