2017-03-01 13 views
3

私はマルチプラットフォームのJAVAFXデスクトップアプリケーションを作ろうとしており、ビデオを再生したいのです。ここでは、サンプルコードされる -LinuxでjavaFXでビデオを再生する方法

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.media.Media; 
import javafx.scene.media.MediaPlayer; 
import javafx.scene.media.MediaView; 
import javafx.stage.Stage; 
import java.io.File; 

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception{ 
     AnchorPane anchorPane = new AnchorPane(); 
     MediaView mediaview = new MediaView(); 
     anchorPane.getChildren().addAll(mediaview); 
     primaryStage.setTitle("Linux Video Play Test"); 
     primaryStage.setScene(new Scene(anchorPane, 540, 210)); 
     primaryStage.show(); 

     File file=new File("video.flv"); 
     Media media=new Media(file.toURI().toString()); 
     MediaPlayer mediaplayer = new MediaPlayer(media); 
     mediaview.setMediaPlayer(mediaplayer); 
     mediaplayer.play(); 
    } 


    public static void main(String[] args) { 
     launch(args); 
    } 
} 

「video.flv」は同じフォルダ内に存在し、コーデック情報は、上記のコードは、Windows(10勝、x64の、JDKに完璧に動作here

を見つけることができます1.8.92)が、Linux(Ubuntuの16.10、x64の、JDK 1.8.112)に次のエラーを与える -

Exception in Application start method 
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: MediaException: UNKNOWN : com.sun.media.jfxmedia.MediaException: Could not create player! : com.sun.media.jfxmedia.MediaException: Could not create player! 
    at javafx.scene.media.MediaException.exceptionToMediaException(MediaException.java:146) 
    at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:511) 
    at javafx.scene.media.MediaPlayer.<init>(MediaPlayer.java:414) 
    at Main.start(Main.java:24) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) 
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139) 
    ... 1 more 
Caused by: com.sun.media.jfxmedia.MediaException: Could not create player! 
    at com.sun.media.jfxmediaimpl.NativeMediaManager.getPlayer(NativeMediaManager.java:274) 
    at com.sun.media.jfxmedia.MediaManager.getPlayer(MediaManager.java:118) 
    at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:467) 
    ... 11 more 

Process finished with exit code 1 

どのように私はそれがLinux上で動作させることができますか? 私はなど、 'glibの'、 'はlibavformat' のようないくつかの依存関係があることを理解しかし、私は

sudo apt-get install glib 

をしようとしたとき、それはlibavformat53と

E: Unable to locate package glib 

同じ問題を言います。ビデオフォーマットの制限は問題ではないことに注意してください。私は自分のアプリのユーザーにビデオファイルを提供します。だから、もし私が1つのフォーマットの作業(例えばflv)をすることができれば、それはすべてのビデオをそのフォーマットに変換することができます。また、私はエンドユーザーがターミナルなどでコマンドを入力するなど、問題を起こさないようにしたくありません。私はこのアプリケーションを ".deb"ファイルとして配布したいと思います。ユーザーはdebファイルをダウンロードし、それをクリックしてインストールすることができます(ubuntuソフトウェアセンターなどを介して)。それは動作します(Linuxでビデオを再生します)。インストールが完了すると、まずアプリケーションを起動するとbashスクリプトが起動し、メインのjarファイルが起動します。私は2つのオプションを検討しています -

1) - debパッケージ自体にすべての依存関係(glib、libavformat)を指定して、アプリケーションと共にインストールします。しかし、問題は私がubuntu 16.10を使っていて、以前のlibs(glib2.28とlibavformat53)がrepoで利用できないということです。私はglib2.50とlibavformat57を見つけることができますが、彼らは動作していないようです(あるいは多分何か間違っている)。 debファイルに依存関係とリポジトリの両方を指定して簡単にインストールできるようにする方法はありますか?もしそうでなければ、私はおそらくユーザがrootアクセスを一度与えることを期待することができるので、これらのlibsを、アプリケーション起動時に起動するbashスクリプト経由でインストールすることが可能ですか?

2) - 「javafx.scene.media.MediaPlayer」を完全に削除し、hereのようなサードパーティのライブラリを使用することも検討しています。しかし、これらのソリューションはすべて、誰かが正しい方向を指すことによって私を助けることができるように、非常に複雑に見えます。また、これらのライブラリのほとんどはコピーレフト(GPL3/LGPL3)の下にあるように見えます。私は自分のアプリをソースにしておきたいと思っています。それは可能ですか?

Ps:これは私にとって初めてのStackoverflow投稿ですので、間違いがあれば私にご容赦ください。また、悪い英語のために申し訳ありません。 :)

答えて

0

Mediaplayerには、ライブラリlibavformat54と必要なすべてのライブラリが必要です。私はDebian 9(ストレッチ)で試してみました。必要なライブラリは主にDebian 7(wheezy)にありますが、Debian 9にはまだ残っています。あなたの配布物に含まれていないライブラリをすべて手動でロードし、dpkgでインストールする必要があります。 libmp3lame0では、純粋なライブラリが必要なので最も問題がありましたが、ほとんどの場合、再パックされたバージョンがあります。 libavformat54にはlibavcodec54とlibavutil51_1.0.10が必要です。この2つのライブラリをインストールしたら、libavformat54をインストールすることができます。したがって、2つの図書館で始まり、必要なものを探し、インターネットから必要な図書館を入手してください。私は、必要なライブラリを手に入れるためには、pkgs.orgが一番良いと思います。

関連する問題