[JavaFX] MPEG-4 multimedia support in JavaFX

JavaFX 2.1で、H.264/AVCビデオとAdvanced Audio Coding (AAC)オーディオを含むMPEG-4マルチメディアコンテナフォーマットで格納されているデジタルメディアの再生をサポートしました。この新しい機能は、JavaFXのサポートされているすべてのOS(Mac OS X、Linux、Windows XPとVista (32bit) 、およびWindows 7 (32/64bit)を含む)全体で動作します。Mac OS XとWindows 7では、追加ソフトウェアなしで再生機能を利用頂けますが、LinuxやWindows 7よりも古いWindowsのバージョンでは、3rdパーティ製のパッケージ(例えばこちら)をインストールする必要があります。

実際のオーディオおよびビデオのデコーディングは、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 final String MEDIA_URL = "http://someserver/somedir/somefile.mp4";
private static String arg1;

    @Override public void start(Stage stage) {
        stage.setTitle("Media Player");

// Create media player
        Media 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 information
        media.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 graph
        MediaView 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 件のコメント:

コメントを投稿