字幕を制御するサンプルコード。
本サンプルではJMF Controlであるorg.bluray.media.SubtitlingControlの機能を利用して以下を行っている。
- 使用可能な字幕のリストを表示
- 英語字幕をON
なお、これらの機能はSubtitleAvailableEventが発生するまで使用できないので要注意。
また、当然のことながら、本サンプルで使用するMovie PlayList fileにはPresentation Graphics streamやText subtitle streamが含まれている必要がある。
また、当然のことながら、本サンプルで使用するMovie PlayList fileにはPresentation Graphics streamやText subtitle streamが含まれている必要がある。
Main.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.util.EventObject;
import javax.media.Manager;
import javax.media.Player;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import org.bluray.media.SubtitlingControl;
import org.bluray.net.BDLocator;
import org.davic.media.MediaLocator;
import org.dvb.media.SubtitleAvailableEvent;
import org.dvb.media.SubtitleListener;
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import org.havi.ui.HScreen;
public class Main implements Xlet, SubtitleListener {
Graphics g = null;
int x=100, y=100;
SubtitlingControl sc = null;
public void initXlet(XletContext xc){
try {
HScene hs= HSceneFactory.getInstance().getFullScreenScene(
HScreen.getDefaultHScreen().getDefaultHGraphicsDevice());
hs.setFont(new Font(null, java.awt.Font.BOLD, 48));
hs.setVisible(true);
g = hs.getGraphics();
g.setColor(Color.white);
Player player = Manager.createPlayer(new MediaLocator(new BDLocator("bd://1.PLAYLIST:00000")));
sc = (SubtitlingControl)player.getControl("org.bluray.media.SubtitlingControl");
sc.addSubtitleListener(this);
player.start();
} catch (Exception e){
}
}
public void startXlet(){}
public void pauseXlet(){ }
public void destroyXlet(boolean unconditional){ }
public void subtitleStatusChanged(EventObject arg0) {
// 字幕が使用可能になるのを待つ
if( arg0 instanceof SubtitleAvailableEvent ){
g.drawString("Subtitle is available", x, y); y+=50;
// 選択可能な字幕を取得
String[] ss = sc.listAvailableLanguages();
for( int i = 0; i < ss.length; i++ ){
g.drawString(i+": "+ss[i], x, y ); y+=50;
}
try {
// 英語の字幕に切り替え
sc.selectLanguage("eng");
} catch (Throwable th) {
g.drawString("err:"+th.toString(), x, y); y+=50;
}
// 字幕表示ONに切り替え
sc.setSubtitling(true);
}
}
}
関連する項目
- PlayItem情報の取得: 字幕のリストを取得する別の方法
- 既存Clip AV Stream fileへの字幕追加方法
- 字幕変更イベントの取得