PlayItem情報の取得

指定した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){ }
}

関連する項目

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください