パッケージjavafx.scene.media
音声およびビデオをJava FXアプリケーションに統合するクラスのセットを提供します。 このパッケージの主な用途は、メディア再生です。 メディア・パッケージには、Media、MediaPlayerおよびMediaViewの3つの主要なクラスがあります。
目次
サポートされているメディア・タイプ
Java FXでは、異なる多くのメディア・タイプがサポートされます。 メディア・タイプは、コンテナ・フォーマットと1つ以上のエンコーディングの組合せと考えられます。 コンテナ・フォーマットは、単に、エンコードされたデータを含む基本的なストリームである場合があります。サポートされているエンコーディング・タイプ
エンコーディング・タイプは、サンプリングされたオーディオまたはビデオのデータを格納する方法を指定します。 通常、エンコーディング・タイプは特定の圧縮アルゴリズムを暗黙的に示します。 次の表は、Java FXメディアでサポートされているエンコーディング・タイプを示します。
| エンコーディング | Type | 説明 |
|---|---|---|
| AAC | Audio | Advanced Audio Codingオーディオ圧縮 |
| MP3 | Audio | Raw MPEG-1、2および2.5オーディオ、レイヤーI、IIおよびIII、サポートされているすべてのサンプリング周波数とビット・レートの組合せ。 注意: ファイルには少なくとも3個のMP3フレームが含まれている必要があります。 |
| PCM | Audio | 非圧縮、生のオーディオ・サンプル |
| H.264/AVC | ビデオ | H.264/MPEG-4 Part 10 / AVC (Advanced Video Coding)ビデオ圧縮 |
| VP6 (*) | ビデオ | On2 VP6ビデオ圧縮 |
(*) VP6ビデオ・エンコーディングは、JDK 9以降では非推奨です。
サポートされているコンテナ・タイプ
コンテナ・タイプは、エンコードしたオーディオ、ビデオおよびその他のメディア・データの格納に使用するファイル形式を指定します。 各コンテナ・タイプは、1つ以上のMIMEタイプ、ファイル拡張子およびファイル・シグネチャ(ファイルの初期バイト)と関連付けられています。 次の表は、Java FXメディアでサポートされているコンテナとエンコーディング・タイプの組合せを示します。
| コンテナ | 説明 | ビデオ・エンコーディング | オーディオ・エンコーディング | MIMEタイプ | ファイル拡張子 |
|---|---|---|---|---|---|
| AIFF | Audio Interchange File Format | N/A | PCM | audio/x-aiff | .aif, .aiff |
| FXM、FLV (*) | FX Media, Flash Video | VP6 | MP3 | video/x-javafx, video/x-flv | .fxm, .flv |
| HLS (**) | MP2T HTTP Live Streaming (オーディオビジュアル) | H.264/AVC | AAC | application/vnd.apple.mpegurl, audio/mpegurl | .m3u8 |
| HLS (**) | MP3 HTTP Live Streaming (オーディオのみ) | N/A | MP3 | application/vnd.apple.mpegurl, audio/mpegurl | .m3u8 |
| MP3 | MPEG-1、2、2.5生オーディオ・ストリーム(ID3メタデータv2.3またはv2.4を持つ可能性がある) | N/A | MP3 | audio/mpeg | .mp3 |
| MP4 | MPEG-4 Part 14 | H.264/AVC | AAC | video/mp4, audio/x-m4a, video/x-m4v | .mp4, .m4a, .m4v |
| WAV | Waveform Audio Format | N/A | PCM | audio/x-wav | .wav |
(*) JDK 9以降、FXMおよびFLVコンテナは非推奨です。
(**) HLSはコンテナ・タイプではなくプロトコルですが、ここでは同様の属性を集約するために含まれています。
サポートされているプロトコル
| プロトコル | 説明 | 参照先 |
|---|---|---|
| FILE | ローカル・ファイルのURI表現用プロトコル | java.net.URI |
| HTTP | リモート・ファイルの表現用ハイパーテキスト転送プロトコル | java.net.URI |
| HTTPS | リモート・ファイルの表現に安全なハイパーテキスト転送プロトコル | java.net.URI |
| JAR | FILE、HTTPまたはHTTPSプロトコルを介してアクセス可能なファイル内のメディア・エントリの表現 | java.net.JarURLConnection |
| HTTPライブ・ストリーミング(HLS) | HTTPまたはHTTPS経由のプレイ・リスト・ベースのメディア・ストリーミング | 『Internet-Draft: HTTP Live Streaming』 |
HTTPを介したMPEG-4再生
ストリームのデコードに必要なヘッダーがファイルの先頭に表示されるように、HTTPまたはHTTPSで再生するMPEG-4メディアをフォーマットすることをお勧めします。 そうでない場合、再生はファイル全体がダウンロードするまで停止することがあります。
HTTPライブ・ストリーミング(HLS)
HLS再生では、次の特性を持つソースを処理します。
- オンデマンドおよびライブ・プレイリスト。
- 基本的なMP3オーディオ・ストリーム(audio/mpegurl)、および1つのAACオーディオと1つのH.264/AVCビデオ・トラックの多重MP2Tストリーム(application/vnd.apple.mpegurl)。
- 整数または浮動小数点期間のプレイリスト。
この基本プロファイルに一致しないソースは、処理が保証されません。 プレイリストには、ソースを構成するストリームに関する情報が含まれ、再生の開始時にダウンロードされます。 別のストリーム、ビット・レートおよびビデオ解像度との切替えは、ネットワーク条件の関数として自動的に処理されます。
サポートされているメタデータ・タグ
メディア・コンテナには、ファイル内のメディアを示す特定のメタデータを含めることができます。 Java FXメディアAPIでは、Media.getMetadata()メソッドを介してメタデータを使用可能にしています。 このマッピングのキーは、次の表に示されたJava FXメディアでサポートされているタグを使用したタグと呼ばれます。 どのタグが特定のメディア・ソースに使用可能かは、実際にそのソースに格納されているメタデータによって異なります。つまり、すべてのタグが使用可能であることが保証されているわけではありません。
| コンテナ | タグ(文字列型) | Type | 説明 |
|---|---|---|---|
| FXM, FLV | audio codec | java.lang.String | オーディオ・トラックに使用されたエンコーダ。 |
| FXM, FLV | duration | javafx.util.Duration | メディアの期間。 |
| FXM, FLV | video codec | java.lang.String | ビデオ・トラックに使用されたエンコーダ。 |
| FXM, FLV | width | java.lang.Integer | ビデオ・トラックの幅(ピクセル)。 |
| FXM, FLV | height | java.lang.Integer | ビデオ・トラックの高さ(ピクセル)。 |
| FXM, FLV | framerate | java.lang.Double | ビデオ・フレーム・レート(1秒当たりのフレーム数)。 |
| FXM, FLV | creationdate | java.lang.String | ビデオが作成された日付。 |
| FXM, FLV, MP3 | raw metadata | Map<String,ByteBuffer> | 適切なメディア仕様に従った生のメタデータ。 キー「ID3」はMP3 ID3v2メタデータにマップされ、「FLV」はFLV onMetadataマーカー・コンテンツにマップされます。 |
| MP3 | album artist | java.lang.String | アルバム全体のアーチストで、コンピレーションの場合は「Various Artists」となることがあります。 |
| MP3 | album | java.lang.String | アルバムの名前。 |
| MP3 | artist | java.lang.String | トラックのアーチスト。 |
| MP3 | comment-N | java.lang.String | コメント、Nは0相対インデックス。 コメント・フォーマット: ContentDescription[lng]=Comment |
| MP3 | composer | java.lang.String | トラックのコンポーザ。 |
| MP3 | year | java.lang.Integer | トラックが録音された年。 |
| MP3 | disc count | java.lang.Integer | アルバムのディスク数。 |
| MP3 | disc number | java.lang.Integer | このトラックが存在するディスクの1相対インデックス。 |
| MP3 | duration | javafx.util.Duration | トラックの期間。 |
| MP3 | genre | java.lang.String | トラックのジャンル、Classical、DarkwaveまたはJazzなど。 |
| MP3 | image | javafx.scene.image.Image | アルバム・カバー。 |
| MP3 | title | java.lang.String | トラックの名前。 |
| MP3 | track count | java.lang.Integer | アルバムのトラック数。 |
| MP3 | track number | java.lang.Integer | ディスク上のトラックの1相対インデックス。 |
Java FXでのメディアの再生
基本的な再生
Java FXでメディアを再生するために必要な基本手順を次に示します。
- 必要なメディア・ソースの
Mediaオブジェクトを作成します。 MediaオブジェクトからMediaPlayerオブジェクトを作成します。MediaViewオブジェクトを作成します。MediaPlayerをMediaViewに追加します。- Add the
MediaViewをシーングラフに追加します。 MediaPlayer.play()を起動します。
MediaViewクラスのドキュメント内のサンプル・コードで示されています。 次に、注意事項を示します。
- 1つの
Mediaオブジェクトは、複数のMediaPlayerの間で共有できます。 - 1つの
MediaPlayerは、複数のMediaViewの間で共有できます。 - メディアは、表示にビューが必要ですが、
MediaViewを作成せずにMediaPlayerにより直接再生できます。 MediaPlayer.play()のかわりに、MediaPlayer.setAutoPlay(true)を使用して、再生が可能なかぎり早く開始されるようにリクエストできます。MediaPlayerには、MediaPlayer.Statusで定義されたいくつかの動作状態があります。- オーディオのみのメディアは、かわりに
AudioClipを使用して再生できます(短いクリップの低レイテンシ再生に推奨)。
エラー処理
Java FXメディア使用時のエラーは、同期的な場合と非同期的な場合のいずれかです。 一般的に、同期エラーはそれ自体をJava Exceptionとして示し、非同期エラーの場合はJava FXプロパティが設定されます。 後者の場合、errorプロパティが直接監視されるか、onErrorコールバックが登録されるか、その両方の場合もあります。
同期エラーの主なソースは、Media()およびMediaPlayer()です。 非同期エラー・プロパティは、Media.errorおよびMediaPlayer.errorで、非同期エラー・コールバックはMedia.onError、MediaPlayer.onErrorおよびMediaView.onErrorです。
一部のエラーは重複する場合があります。 たとえば、MediaPlayerは、発生したエラーをその関連するMediaに伝播し、MediaPlayerからその関連するすべてのMediaViewへも伝播されます。 その結果、どのプロパティをモニターするかに応じて、1つのエラーの発生に対して複数の通知を受信する可能性があります。
次のコード・スニペットは、メディアのエラー処理を示しています。
String source;
Media media;
MediaPlayer mediaPlayer;
MediaView mediaView;
try {
media = new Media(source);
if (media.getError() == null) {
media.setOnError(new Runnable() {
public void run() {
// Handle asynchronous error in Media object.
}
});
try {
mediaPlayer = new MediaPlayer(media);
if (mediaPlayer.getError() == null) {
mediaPlayer.setOnError(new Runnable() {
public void run() {
// Handle asynchronous error in MediaPlayer object.
}
});
mediaView = new MediaView(mediaPlayer);
mediaView.setOnError(new EventHandler<MediaErrorEvent>() {
public void handle(MediaErrorEvent t) {
// Handle asynchronous error in MediaView.
}
});
} else {
// Handle synchronous error creating MediaPlayer.
}
} catch (Exception mediaPlayerException) {
// Handle exception in MediaPlayer constructor.
}
} else {
// Handle synchronous error creating Media.
}
} catch (Exception mediaException) {
// Handle exception in Media constructor.
}
-
インタフェースのサマリー インタフェース 説明 AudioSpectrumListener オーディオ・スペクトル・コールバック・インタフェース。 -
クラスのサマリー クラス 説明 AudioClip AudioClipは、最小の遅延で再生できる音声セグメントを表します。AudioEqualizer AudioEqualizerクラスは、メディア・プレイヤに音声等化コントロールを提供します。AudioTrack 音声トラックを示すTrack。EqualizerBand EqualizerBandクラスは、AudioEqualizerの各バンドに対するコントロールを提供します。Media Mediaクラスは、メディア・リソースを表します。MediaErrorEvent 処理メディアでのエラーの発生を表すEvent。MediaMarkerEvent メディア・マーカーを表すActionEvent。MediaPlayer MediaPlayerクラスは、メディアの再生のコントロールを提供します。MediaView MediaPlayerで再生されるMediaのビューを提供するNode。SubtitleTrack ビデオ・トラックに重ねてレンダリングされるサブタイトルやキャプション・データが含まれるTrack。Track メディア・リソースに含まれているトラックを表すクラス。VideoTrack ビデオ・トラックを示すTrack。 -
列挙型のサマリー 列挙型 説明 MediaException.Type エラーのカテゴリを記述した列挙。MediaPlayer.Status MediaPlayerの異なるステータス値を示す列挙。 -
例外のサマリー 例外 説明 MediaException MediaExceptionは、Media、MediaPlayerまたはMediaViewの実行時エラー条件を記述します。