ホーム   »  スポンサー広告  »     »  Java  »  JMFとファイル拡張子

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JMFとファイル拡張子

ローカルのファイルを JMF で再生する場合、どうやらファイルの拡張子を見てメディアのタイプを判断しているようだ。

JMF を試すための簡単なコードは以下のような感じ (あらかじめ Sun のサイトから JMF をダウンロードしておき jmf.jar にクラスパスを通しておく)。Player を生成しコントローラーと一緒に JFrame などに埋め込んで表示する。

URL url = new File("QuickTimeやMPEGなどのパス").toURL();
JFrame frame = new JFrame("Instant JMF Player");
final Player player = Manager.createRealizedPlayer(url);
frame.getContentPane().add(
    player.getVisualComponent(), BorderLayout.CENTER);
frame.getContentPane().add(
    player.getControlPaneComponent(), BorderLayout.SOUTH);
frame.setDefaultCloseOperation(
    WndowConstants.DISPOSE_ON_CLOSE);
frame.pack();
// 閉じたときに止めないと音声だけ鳴り続ける
frame.addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e){
        player.stop();
        player.close();
    }
});
// 表示前に開始/終了しておくと
// 初期状態で最初のフレームを表示しておける
player.start();
player.stop();
frame.show();

Manager.createRealizedPlayer() に渡す URL についてだが、ファイルの内容が正しくてもその拡張子が不適切な場合、以下のような例外が発生する。どうやらファイル拡張子で内容を判断しているようだ。

javax.media.NoPlayerException: Cannot find a Player for :file:/C:/xxx
    at javax.media.Manager.createPlayerForContent(Manager.java:1412)
    at javax.media.Manager.createPlayer(Manager.java:417)
    at javax.media.Manager.createPlayer(Manager.java:332)
    at javax.media.Manager.createRealizedPlayer(Manager.java:527)
    …

ちなみにファイルの拡張子を正しく直すとちゃんと再生できる。

MediaLocator から DataSource を作成して createRealizedPlayer() に渡してもほぼ同様の例外が発生する。

javax.media.NoPlayerException: Cannot find a Player for: com.sun.media.protocol.file.DataSource@00000
    at javax.media.Manager.createPlayerForSource(Manager.java:1512)
    at javax.media.Manager.createPlayer(Manager.java:500)
    at javax.media.Manager.createRealizedPlayer(Manager.java:579)
    …

ここらへんの Content-Type に関しては API リファレンスに書いてある。

Content-Type があらかじめ分かっている上で不適切な拡張子でも正しく解釈されるように、getContentType() で既知の Content-Type を返す自作の DataSource ラッパークラスを作ってみたがやはり同様の例外が発生した。やはり正しい拡張子を付けるしかないのか。

ちなみにこれはローカルファイルに関しての話。ファイルをネットワーク越しに取得する場合は、適切な Content-Type が付けられていれば正しく再生できるだろうと予想。

コメント
トラックバック
トラックバック URL
コメントの投稿
管理者にだけ表示を許可する
Profile
Takami Torao
Takami Torao
C/C++ 使いだった 1996年、運命の Java と出会い現在に至る。のらアーキテクト。
Yah, this is image so I don't wanna eat spam, sorry!
Search

Google
MOYO Laboratory
Web

カテゴリー
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
ブロとも申請フォーム
RSSフィード
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。