2016-12-23 3 views
0

私はライブストリーミングのためのチャットボットを作ろうとしています。私はyoutubeを使用する曲要求機能を追加しようとしています。私はそれをYouTubeとGoogleドライブmp3で動作させようとしましたが、どちらもMediaExceptionを出します:メディアプレーヤーを作成できませんでした。これは、file:///アドレスを使用して動作します。メディアJavafx mediaplayer/mediaオブジェクトはリモートファイルをサポートしていますか?

public void start(Stage stage) throws Exception { 
    // TODO Auto-generated method stub 
    Media media=new Media("http:///youtube.com/embed/n5O0iA--sec"); 
    if(media.getError()!=null){ 
     System.out.println("media error"); 
     media.getError().printStackTrace(); 
    } 
    MediaPlayer player=new MediaPlayer(media); 
    if(player.getError()!=null){ 
     System.out.println("player error"); 
     player.getError().printStackTrace(); 
    } 
    player.setAutoPlay(true); 
    player.setOnReady(new Runnable(){ 
     @Override public void run(){ 
      System.out.println("Video is ready"); 
     } 
    }); 
    player.setOnError(new Runnable(){ 
     @Override public void run(){ 
      System.out.println("videoplayer errored"); 
      player.getError().printStackTrace(System.out); 
     } 
    }); 
    player.play(); 
    MediaView mView=new MediaView(); 
    mView.setMediaPlayer(player); 
    mView.setOnError(new EventHandler<MediaErrorEvent>(){ 

     @Override 
     public void handle(MediaErrorEvent arg0) { 
      // TODO Auto-generated method stub 
      System.out.println("view error"); 
      arg0.getMediaError().printStackTrace(System.out);; 
     } 
    }); 
    stage.setScene(new Scene(new StackPane(mView))); 
    //view.getEngine().load(url); 
    //stage.setScene(new Scene(view)); 
    stage.sizeToScene(); 
    stage.show(); 
} 

ノートにアクセスするには コード:私はGUIで上記のコードを実行するためにjavafx.applicationを使用していますが、GUIは必要ありません。 スタックトレース:

view error 
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(Unknown Source) 
    at javafx.scene.media.MediaPlayer.init(Unknown Source) 
    at javafx.scene.media.MediaPlayer.access$1000(Unknown Source) 
    at javafx.scene.media.MediaPlayer$InitMediaPlayer.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: com.sun.media.jfxmedia.MediaException: Could not create player! 
    at com.sun.media.jfxmediaimpl.NativeMediaManager.getPlayer(Unknown Source) 
    at com.sun.media.jfxmedia.MediaManager.getPlayer(Unknown Source) 
    ... 4 more 
videoplayer errored 
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(Unknown Source) 
    at javafx.scene.media.MediaPlayer.init(Unknown Source) 
    at javafx.scene.media.MediaPlayer.access$1000(Unknown Source) 
    at javafx.scene.media.MediaPlayer$InitMediaPlayer.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: com.sun.media.jfxmedia.MediaException: Could not create player! 
    at com.sun.media.jfxmediaimpl.NativeMediaManager.getPlayer(Unknown Source) 
    at com.sun.media.jfxmedia.MediaManager.getPlayer(Unknown Source) 
    ... 4 more 
+0

動画が再生されていないことを示す[mcve](http://stackoverflow.com/help/mcve)を入力してください。指定した例は完全ではありません(例:urlは未定義です)。 – jewelsea

+0

@jewelsea申し訳ありませんが、変数urlの宣言を含めるのを忘れていましたが、それを表すURL文字列に置き換えて、スタックトレースを挿入しました。 –

+0

Youtubeはメディアファイルを直接公開しないので、mediaplayerはそのためには機能しません。 – pvg

答えて

0

JavaFXのMediaPlayerは、HTTP経由でリモートファイルをサポートしています。単にあなたが

import javafx.application.Application; 
import javafx.stage.*; 
import javafx.scene.*; 
import javafx.scene.media.*; 

public class Test extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Group root = new Group(); 
     Scene scene = new Scene(root, 500, 200); 

     Media pick = new Media("http://www-eng-x.llnl.gov/documents/a_sound.aiff"); 
     MediaPlayer player = new MediaPlayer(pick); 
     player.play(); 

     MediaView mediaView = new MediaView(player); 
     ((Group)scene.getRoot()).getChildren().add(mediaView); 

     primaryStage.setTitle("Media Player"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
    public static void main(String[] args) { 
     launch(args); 
    } 
} 

でこれを確認することができますHow to use JavaFX MediaPlayer correctly?からコードを適応させるこれは、ウィンドウが表示されますし、問題なくリモートAIFFを果たしています。