[ JMFインデックスページ ]
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クラスを使用する方法があります。
コマンドライン引数からメディア・ファイル名を渡され、これを再生するプログラムです。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();
}
}
}
Playerは、標準でコントロールパネルを提供しています。再生/一時停止ボタンと進捗バー、サウンドボリュームボタンと情報ボタンから構成されます。
| 制御修理 | メソッド | |
|---|---|---|
| 再生開始 |
start |
|
| 時間設定 |
setMediaTime |
|
プレーヤの状態が変化すると、イベントが発生します。イベントは、プレーヤに登録されたリスナーに通知されます。
イベントリスナーは、javax.media.ControllerListenerインタフェースです。メソッドは、controllerUpdate(ControllerEvent e)です。非常に多くのイベントがこのインタフェースを呼びます。そこで、インタフェースの引数を解析することになります。一方、javax.media.ControllerAdapterは、発生するイベントごとにきめ細かく対処することができます。
player.addControllerListener(new ControllerAdapter() {
public void endOfMedia(EndOfMediaEvent ev) {
// ...
}
});