11

我正在尝试使用 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();
}

}

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

谢谢。

4

2 回答 2

19

2021 年 10 月更新

我使用 JavaFX 17 再次尝试了这个解决方案,它对我来说效果很好,六年后这真是太好了。

请注意,原始示例中的视频不再托管在 YouTube 上,但无论如何您都希望播放不同的视频。

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

2021 年有效的示例 URL:

观看视频显示完整的 YouTube 网站、嵌入视频,以及视频的 YouTube 播放器。

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

例如

2015 年 12 月 4 日更新

JavaFX 8 的某些版本无法播放 youtube 视频内容。目前,例如,Java 8u66 无法播放 youtube 视频内容,但 Java 8u72 早期访问版本可以。

背景

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

解决方案

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

注意事项

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

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

只有 YouTube 允许在其 HTML5 播放器中播放的视频才能在 JavaFX 中播放。这是 YouTube 视频的很大一部分。仅在 YouTube 的 Flash 播放器中播放的 YouTube 视频不能在 JavaFX 中播放。

示例应用程序

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

水果

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();
  }    
}
于 2013-09-12T10:07:37.293 回答
2

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

于 2013-09-12T08:29:25.580 回答