【问题标题】:Play a Youtube video using JavaFX使用 JavaFX 播放 Youtube 视频
【发布时间】:2013-09-16 11:20:17
【问题描述】:

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

}

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

谢谢。

【问题讨论】:

标签: java javafx


【解决方案1】:

JavaFX 不能仅使用视频 url 播放 youtube 视频。您需要指定视频文件,而不仅仅是随机的 youtube 链接。 试试这个网址:http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv 您的代码运行良好

【讨论】:

  • 注意:最近的 JavaFX 版本不再支持flv 播放(mp4 文件应该可以正常播放)。通过 YouTube 观看播放视频并嵌入加载到 WebView 中的 URL(如我的答案所示)也可以,除了直接指向视频文件的 URL,如本答案中所示。
【解决方案2】:

2021 年 10 月更新

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

请注意,原始示例中的视频不再托管在 YouTube 上,但您还是想播放不同的视频。

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

在 2021 年有效的示例 URL:

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

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

例如

2015 年 12 月 4 日更新

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

背景

有关在 JavaFX 中播放视频的一般信息位于我对Any simple (and up to date) Java frameworks for embedding movies 的回答中。此答案仅涉及嵌入 YouTube 视频,因为这似乎是提问者感兴趣的内容。

解决方案

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

注意事项

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

只能嵌入部分视频。例如,您不能嵌入 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();
  }    
}

【讨论】:

  • 嗨 Jewelsea,我在我们的应用程序中使用了相同的代码,但此代码无法播放 youtube 视频。应用程序视图已成功打开,但在尝试播放时给出错误消息。我们在视图部分遇到这种错误错误:-“发生错误。请稍后再试”。所以请告诉我确切的问题是什么。
  • 我刚刚尝试在 OS X 10.9.5 上的 Java 8u40 上再次运行我的答案中的代码,并且视频播放得非常好。
  • 有什么方法可以将 Webview 节点转换为媒体
  • @Hilea 不,我认为您不能将 WebView 节点转换为 Media 节点。
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
相关资源
最近更新 更多