[ JMFインデックスページ ]

JMFの使い方(プログラミング編)

環境設定

Windows上

Windows Performance Pack版をインストールしているならば、J2SEのインストールド・エクステンションにJMFのクラスライブラリがインストールされているので、環境設定は不要です。もし後でJ2SEを再インストール等した場合は、インストールド・エクステンションのディレクトリに、JMFをインストールしたディレクトリのlib下にあるjfm.jarをコピーします。

プレーヤ編

メディア・コンテンツを再生する利用方法についてです。プレーヤとして使用するときの主役となるAPIは、javax.media.Playerインタフェースです。

もっとも単純なプレーヤの使用

音声プレーヤ

コマンドライン引数からメディア・ファイル名を渡され、これを再生するプログラムです。GUI部を設定していないので、動画ファイルを指定しても音声のみの再生となります。

import javax.media.Player;
import javax.media.Manager;
import java.io.File;
import java.net.URL;
import java.io.FileNotFoundException;

public class SimplePlayer1 {
    public static void main(final String[] args) {
        try {
            File file = new File(args[0]);
            URL url = file.toURL();
            Player player = Manager.createRealizedPlayer(url);
            player.start();
        } catch (FileNotFoundException e) {
            // エラー処理
        }
    }
}

メディア・コンテンツの指定方法については、上記サンプルコードのようにURLを使用する方法以外に、javax.media.MediaLocatorクラスを使用する方法、javax.media.protocol.DataSourceクラスを使用する方法があります。

URLを使用する方法
http://、file://には対応しているが、rtp://に対応していない

動画プレーヤ

コマンドライン引数からメディア・ファイル名を渡され、これを再生するプログラムです。GUI部を設定しており、動画ファイルの再生が可能です。

import javax.swing.JFrame;
import java.awt.BorderLayout;
import java.io.File;
import javax.media.Player;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.protocol.DataSource;

public class SimplePlayer2 {
    public static void main(final String[] args) {
        JFrame app = new JFrame();
        try {
            File file = new File(args[0]);
            MediaLocator locator = new MediaLocator(file.toURL());
            DataSource source = Manager.createDataSource(locator);
            Player player = Manager.createRealizedPlayer(source);
            if (player.getVisualComponent() != null) {
                app.getContentPane().add(
                    player.getVisualComponent(), BorderLayout.CENTER
                );
                app.getContentPane().add(
                    player.getControlPanelComponent(), BorderLayout.NORTH
                );
            }
            app.pack();
            app.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
ControlPaneComponent

Playerは、標準でコントロールパネルを提供しています。再生/一時停止ボタンと進捗バー、サウンドボリュームボタンと情報ボタンから構成されます。

プレーヤの制御

制御修理 メソッド
再生開始
start
時間設定
setMediaTime

プレーヤの状態取得(イベント)

プレーヤの状態が変化すると、イベントが発生します。イベントは、プレーヤに登録されたリスナーに通知されます。

イベントリスナーは、javax.media.ControllerListenerインタフェースです。メソッドは、controllerUpdate(ControllerEvent e)です。非常に多くのイベントがこのインタフェースを呼びます。そこで、インタフェースの引数を解析することになります。一方、javax.media.ControllerAdapterは、発生するイベントごとにきめ細かく対処することができます。

最後まで再生したことをイベントとして検査する

player.addControllerListener(new ControllerAdapter() {
    public void endOfMedia(EndOfMediaEvent ev) {
        // ...
    }
});