実際のオーディオおよびビデオのデコーディングは、OS固有のメディアエンジンに依存していますが、JavaFXのメディアフレームワークは、これらのネイティブエンジンでサポートされているすべてのマルチメディアコンテナフォーマットと、メディアのエンコーディングを処理しようとしているわけではありません。その代わり、JavaFXが動作するすべてのプラットフォームで、等しく十分にテストされた機能を提供することを選択しています。
Mac OS X上でのJavaFXのMPEG-4の再生における既知の制限は、最大でも一つのH.264エンコードビデオストリームしか同時に再生できない、というものです。とはいえ、システム·リソースによって課されるものとは別に、再生できるAACエンコードトラックの数に固有の制限はありません。この問題は現在調査中です。
MPEG-4メディアソースの再生は、他の種類のメディアコンテンツ(*)の場合と同じでメディアスタックが動的にマルチメディアコンテナやエンコードの種類を検出し、それに応じて再生します。
コードはこんな感じです。
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.*/
import javafx.application.Application;import javafx.collections.ListChangeListener;import javafx.collections.MapChangeListener;import javafx.scene.Group;import javafx.scene.Scene;import javafx.scene.media.Media;import javafx.scene.media.MediaView;import javafx.scene.media.Track;import javafx.stage.Stage;/*** A sample media player which loops indefinitely over the same video*/public class MediaPlayer extends Application {private static String arg1;@Override public void start(Stage stage) {stage.setTitle("Media Player");// Create media playerMedia media = new Media((arg1 != null) ? arg1 : MEDIA_URL);javafx.scene.media.MediaPlayer mediaPlayer = new javafx.scene.media.MediaPlayer(media);mediaPlayer.setAutoPlay(true);mediaPlayer.setCycleCount(javafx.scene.media.MediaPlayer.INDEFINITE);// Print track and metadata informationmedia.getTracks().addListener(new ListChangeListener<Track>() {public void onChanged(Change<? extends Track> change) {System.out.println("Track> "+change.getList());}});media.getMetadata().addListener(new MapChangeListener<String,Object>() {public void onChanged(MapChangeListener.Change<? extends String, ? extends Object> change) {System.out.println("Metadata> "+change.getKey()+" -> "+change.getValueAdded());}});// Add media display node to the scene graphMediaView mediaView = new MediaView(mediaPlayer);Group root = new Group();Scene scene = new Scene(root,800,600);root.getChildren().add(mediaView);stage.setScene(scene);stage.show();}public static void main(String[] args) {if (args.length > 0) {arg1 = args[0];}Application.launch(args);}}
(*) JavaFX 2.0は既に以下のメディアフォーマットをサポートしています。
- 音声:MP3、非圧縮PCMを含むAIFF、非圧縮PCMを含むWAV
- 動画:VP6ビデオを含むFLV、MP3オーディオ
http://blogs.oracle.com/javafx/entry/mpeg_4_multimedia_support_in
0 件のコメント:
コメントを投稿