使用 JavaFX 播放 Youtube 视频

2022-09-04 07:49:40

我正在尝试使用javaFX播放YouTube上的视频。这是我的代码

public class Main extends Application {

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

@Override
public void start(Stage primaryStage) throws Exception {
    primaryStage.setTitle("Media");
    Group root = new Group();
    Media media = new Media("http://www.youtube.com/watch?v=k0BWlvnBmIE");
    MediaPlayer mediaPlayer = new MediaPlayer(media);
    mediaPlayer.play();

    MediaView mediaView = new MediaView(mediaPlayer);

    root.getChildren().add(mediaView);
    Scene scene = SceneBuilder.create().width(500).height(500).root(root)
            .fill(Color.WHITE).build();
    primaryStage.setScene(scene);
    primaryStage.show();
}

}

窗口打开,但视频无法播放,也没有例外。问题是什么,我该如何解决它。

谢谢。


答案 1

2021年10月更新

我使用JavaFX 17再次尝试了这个解决方案,它对我来说工作得很好,六年后这很好。

请注意,原始示例中的视频不再托管在 YouTube 上,但您仍希望播放其他视频。

为此,只需将网址的视频 ID 部分替换为视频的 ID(在 YouTube 中播放视频时,您可以在网址中看到该 ID)。utUPth77L_o

在 2021 年有效的 URL 示例:

链接的视频显示完整的YouTube网站,链接的视频仅显示视频的YouTube播放器。watchembed

YouTube确实强制在其网站上显示某些视频,而不是使用嵌入链接,因此即使可以通过观看URL在YouTube上观看视频,嵌入链接也并不总是有效,但是在这种情况下,观看链接在WebView中应该可以正常工作。

更新 2015年12月4日

JavaFX 8的某些版本无法播放YouTube视频内容。例如,目前,Java 8u66无法播放youtube视频内容,但Java 8u72抢先体验版本可以。

背景

有关在JavaFX中播放视频的一般信息,请参阅我的回答:任何用于嵌入电影的简单(和最新)Java框架。这个答案只是涉及嵌入YouTube视频,因为这似乎是提问者感兴趣的内容。

溶液

JavaFX可以使用YouTube视频URL播放YouTube视频,前提是您将URL提供给WebView而不是MediaPlayer

考虑

如果您只想要YouTube媒体播放器,而不是整个相关的YouTube页面,请使用URL中的位置而不是位置。/embed/watch

只能嵌入某些视频。例如,您无法嵌入Katy Perry视频,因为YouTube阻止了它以嵌入式格式分发(而是告诉您在YouTube网站上观看视频,该视频仅通过YouTube Flash播放器提供)。

只有YouTube允许在其HTML5播放器中播放的视频才能在JavaFX中播放。这是YouTube视频中相当大的比例。仅在YouTube的Flash播放器中播放的YouTube视频不会在JavaFX中播放。

示例应用程序

下面的JavaFX应用程序播放一块水果的YouTube视频广告。

fruit

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class VideoPlayer extends Application {    
  public static void main(String[] args) { launch(args); }

  @Override public void start(Stage stage) throws Exception {
    WebView webview = new WebView();
    webview.getEngine().load(
      "http://www.youtube.com/embed/utUPth77L_o?autoplay=1"
    );
    webview.setPrefSize(640, 390);

    stage.setScene(new Scene(webview));
    stage.show();
  }    
}

答案 2

JavaFX不能仅使用视频网址播放YouTube视频。您需要指定视频的文件,而不仅仅是随机的YouTube链接。尝试使用此URL:http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv 您的代码正常工作


推荐