指定したMovie PlayList中の特定のPlayItemを構成するElementary Streamに関する情報を取得するサンプルコード。
取得可能な情報を以下にまとめる。見てわかるように取得可能な情報の多くはMovie PlayList file中のstnTableの情報である。
- Video、Audioなどのメディア種別: stnTable中でのPrimaryAudioStream/PrimaryVideoStream/PGTextSTStream..に対応
- コーデック種別:stnTable→[PrimaryAudioStream/PrimaryVideoStream/..]]→streamAttribute:streamCodingTypeに対応
- 言語コード: stnTable→[PrimaryAudioStream/PGTextSTStream→streamAttribute→[audioLanguageCode/PGLanguageCode]に対応
- ストリーム番号: stnTable中での各メディア内での該当Elementary Streamの順番(1始まり)
- Locator: 該当ストリームを特定するためのLocator
Main.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.tv.locator.Locator;
import javax.tv.service.navigation.StreamType;
import javax.tv.service.selection.ServiceContextFactory;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import org.bluray.ti.CodingType;
import org.bluray.ti.PlayItem;
import org.bluray.ti.PlayList;
import org.bluray.ti.Title;
import org.bluray.ti.TitleComponent;
import org.bluray.ti.selection.TitleContext;
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import org.havi.ui.HScreen;
public class Main implements Xlet {
Graphics g = null;
int x=50, y=100;
public void initXlet(XletContext xc){
try {
Font font = new Font(null, java.awt.Font.BOLD, 32);
HScene hs= HSceneFactory.getInstance().getFullScreenScene(
HScreen.getDefaultHScreen().getDefaultHGraphicsDevice());
hs.setFont(font);
hs.setVisible(true);
g = hs.getGraphics();
g.setColor(Color.white);
// Title Contextの取得
ServiceContextFactory scf = ServiceContextFactory.getInstance();
TitleContext tc = (TitleContext)scf.getServiceContext(xc);
Title t = (Title)tc.getService(); // 現Titleの取得
PlayList[] pls = t.getPlayLists(); // 現Titleからアクセス可能なPlayList集合の取得
g.drawString(pls[0].getFileName(),x,y); y+=35;
PlayItem[] pis = pls[0].getPlayItems(); // 0個目のPlayListを構成するPlayItem集合の取得
for( int j = 0; j < pis.length; j++ ){
String s = " +--PlayItem["+j+"]";
g.drawString(s, x, y); y+=35;
// j番目のPlayIteに関する情報を取得
TitleComponent[] tcs = (TitleComponent[])pis[j].getComponents();
for( int k = 0; k < tcs.length; k++ ){
s = " +--Component["+k+"]:";
StreamType st = tcs[k].getStreamType(); // メディア種別を取得
CodingType ct = tcs[k].getCodingType(); // コーデックの種別を取得
Locator l = tcs[k].getLocator(); // Locatorを取得
int sn = tcs[k].getStreamNumber(); // ストリーム番号を取得
String lang = tcs[k].getAssociatedLanguage(); // 言語コードを取得
s += (l.toExternalForm()+", "+", "+st.toString()+", "+ct.toString()+", "+Integer.toString(sn)+", "+lang);
g.drawString(s, x, y); y+=35;
}
}
} catch (Exception e){
}
}
public void startXlet(){}
public void pauseXlet(){ }
public void destroyXlet(boolean unconditional){ }
}