[ 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) { // ... } });