Javaプログラムで動画を扱うために、ここでは表示方法を紹介する。
Javaで動画を再生するためには、Java 8から標準になったJavaFXが使える。このライブラリーは、グラフィカルなユーザインタフェースを使って動画を再生するための機能をWebアプリケーションに提供している。
例えば、下の画面には再生や時間や音量を制御するためのボタンやスライダーが用意されている。これらは、すべてJavaFXのライブラリーを使って追加したものだ。
再生可能な動画の種類は、次の通りである。
- FLV:VP6ビデオMP3音声を含む
- MPEG-4:264/AVC (Advanced Video Coding)を含む
これらの動画がどのようにJavaFXで再生されるかを説明しよう。
動画再生の仕組み
最初に動画が保存されている場所などメディアに関係する情報をMediaクラスのオブジェクトに入れる。これをMediaPlayerクラスに渡し、再生を制御するメソッドを使って再生開始を要求すると動画の再生が始まる仕組みになっている。再生が始まると、MediaPlayer がMediaViewクラスに動画を表示する。
- Media:メディアについての情報(場所、解像度、メタデータ)
- MediaPlayer:メディアを再生のために制御機能を提供する主要なコンポーネント
- MediaView:アニメーション、透過、エフェクトをサポートするノードオブジェクト
動画再生のサンプルプログラム
このサンプルプログラムは、ディスク上のMPEG-4ファイルを再生する。再生は画面下にある「>」ボタンを押すことにより再生が始まり、ボタンが「||」に変わる。次に、変更された「||」ボタンを押せば。再生は一時停止して、制御ボタンが「>」になる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.BorderPane; import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaView; import javafx.stage.Stage; public class SimpleMediaPlayer extends Application {//[1] MediaPlayer mediaPlayer;//[2] Button button;//[3] private static final String MEDIA_URL = "file:/C:/temp/sample.mp4";//[4] @Override//[5] public void start(Stage primaryStage) {//[6] primaryStage.setTitle("Simple Media Player");//[7] Media media = new Media(MEDIA_URL);//[8] mediaPlayer = new MediaPlayer(media);//[9] MediaView mediaView = new MediaView(mediaPlayer);//[10] button = new Button(">");//[11] button.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);//[12] button.setOnAction(new EventHandler<ActionEvent>() {//[13] @Override public void handle(ActionEvent e) {//[14] MediaPlayer.Status status = mediaPlayer.getStatus();//[15] if (status == MediaPlayer.Status.UNKNOWN || status == MediaPlayer.Status.HALTED) {//[16] return;//[17] } if ( status == MediaPlayer.Status.PAUSED//[18] || status == MediaPlayer.Status.READY//[19] || status == MediaPlayer.Status.STOPPED) {//[20] mediaPlayer.play();//[21] button.setText("||");//[22] return;//[23] } mediaPlayer.pause();//[24] button.setText(">");//[25] } }); BorderPane controlPane = new BorderPane();//[26] controlPane.setBottom(button);//[27] BorderPane pane = new BorderPane();//[28] pane.setCenter(mediaView);//[29] pane.setBottom(controlPane);//[30] Scene scene = new Scene(pane, 540, 230);//[31] primaryStage.setScene(scene);//[32] primaryStage.sizeToScene();//[33] primaryStage.show();//[34] } public static void main(String[] args) {//[40] launch(args);//[41] } } |
実行結果
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] クラスSimpleMediaPlayerをApplicationから継承して定義する。
- [2] 変数mediaPlayerを定義する。
- [3] 変数buttonを定義する。
- [4] 定数MEDIA_URLにfile:/C:/temp/sample.mp4を設定する。
- [5]-[6] メソッドstartをオーバーライドして定義する。
- [7] ウィンドウのタイトルにSimple Media Playerを設定する。
- [8] Mediaクラスのmediaオブジェクトをメディア情報にMEDIA_URLを設定して作る。
- [9] MediaPlayerクラスのmediaPlayerオブジェクトを引数にmediaオブジェクトを設定して作る。
- [10] MediaViewクラスのmediaViewオブジェクトを引数にmediaPlayerオブジェクトを設定して作る。
- [11] 「>」マークの再生ボタンオブジェクトを作る。
- [12] 再生ボタンの大きさを設定する。
- [13] ボタンのイベントハンドラーを設定する。
- [14]-[17] mediaPlayerの状態がUNKNOWN やHALTEDの時に再生ボタンが押されても何もしない。
- [18]-[23] mediaPlayerの状態がPAUSEDかREADYか STOPPEDの時に再生ボタンが押されたら、動画の再生を開始し、ボタンのマークに「>」を設定する。
- [24]-[25] mediaPlayerの状態が上の状態のいずれでもない時、動画を一時停止して、ボタンのマークに「||」を設定する。
- [26]-[27] controlPaneオブジェクトを作り、ボタンオブジェクトを配置する。
- [28]-[30] paneオブジェクトを作り、mediaPlayer とcontrolPaneオブジェクトを配置する。
- [31]-[34] primaryStage オブジェクトを引数としてsceneオブジェクトを作り、表示する。
- [40] mainメソッドの定義を行う。
- [41] アプリケーションを起動する。
まとめ
このページではJavaで動画を扱う方法について、サンプルプログラム付きで簡単に紹介した。
それぞれの処理内容の解説を参考にプログラムを少しずつ変えていくことで様々な応用が出来るので、参考にしていただければと思う。