2021 年 10 月更新
我使用 JavaFX 17 再次尝试了这个解决方案,它对我来说效果很好,这在六年后真是太好了。
请注意,原始示例中的视频不再托管在 YouTube 上,但您仍然希望播放不同的视频。
为此,只需替换 url 的视频 ID 部分utUPth77L_o
以及您的视频的 ID(当您在 YouTube 中播放视频时可以在网址中看到该 ID)。
2021 年有效的 URL 示例:
- https://www.youtube.com/watch?v=P_tAU3GM9XI
- https://www.youtube.com/embed/P_tAU3GM9XI?autoplay=1
The watch
链接的视频显示完整的 YouTube 网站,embed
链接的视频仅显示该视频的 YouTube 播放器。
YouTube 确实强制某些视频在其网站上显示,而不是使用嵌入链接,因此即使可以通过观看 URL 在 YouTube 上观看视频,嵌入链接也不会总是有效,但观看链接应该可以正常工作WebView 适合这种情况。
2015 年 12 月 4 日更新
某些版本的 JavaFX 8 无法播放 YouTube 视频内容。例如,目前 Java 8u66 无法播放 YouTube 视频内容,但 Java 8u72 早期访问版本可以。
背景
有关在 JavaFX 中播放视频的一般信息位于我的回答中:用于嵌入电影的任何简单(最新)Java 框架。该答案仅涉及嵌入 YouTube 视频,因为这似乎是提问者感兴趣的内容。
Solution
JavaFX 可以使用 YouTube 视频 URL 播放 YouTube 视频(如果您将 URL 提供给WebView而不是一个媒体播放器.
注意事项
如果您只需要 YouTube 媒体播放器而不是整个相关的 YouTube 页面,请使用/embed
位置而不是/watch
URL 中的位置。
只能嵌入部分视频。例如,您无法嵌入凯蒂·佩里 (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();
}
}