微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaFX MediaView 呈现白色视频

如何解决JavaFX MediaView 呈现白色视频

TL;DR : 解决方案:将 JavaFX 版本增加到 15.0.1。

我正在重新编写我昨天提出的问题,因为它的表述和解释都很糟糕。

我做什么:我使用 JavaFX 创建一个 Media 和一个 MediaView 在场景中渲染 .mp4 视频。

发生了什么:屏幕保持空白。

应该发生什么:视频应该正确呈现并且用户可以看到。

我的尝试

  • 更改文件编码(从 H.264 到 QuickTime(输出为 .mov))。
    • 结果:JavaFX 无法识别 QuickTime 编码。
  • 将 FPS 值从 30 更改为 60 以及从 60 更改为 30。
    • 结果:没有区别。
  • 通过缩短视频来调整文件大小。
    • 结果:没有区别。
  • 将视频分辨率比例从 16:9 更改为 16:10。
    • 结果:没有区别。
  • 将视频分辨率值从 2560x1440 更改为 1920x1080。
    • 结果:视频显示在屏幕上,但我需要一个 2560x1440 的视频来填满屏幕。稍后我会自己处理不同的分辨率。
  • 使用我电脑上的不同视频。
    • 结果:小于或等于 1920x1080 的分辨率工作正常。我尝试使用 2560x1440 分辨率录制不同的视频,但它不起作用。
  • 使用由互联网 URL 引用的 2560x1440 视频。
    • 结果:与上述相同的行为。

我的代码

import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.Stage;

import java.io.File;

public class Application extends javafx.application.Application {
    Stage window;

    @Override
    public void start(Stage primaryStage) {
        window = primaryStage;

        window.setWidth(2560);
        window.setHeight(1440);
        window.setX(0);
        window.setY(0);
        window.setResizable(false);
        window.setFullScreen(true);
        window.setFullScreenExitHint("");

        Pane pane = new Pane();

        // Example to show that adding a simple figure to the pane works fine.
        javafx.scene.shape.Rectangle r = new javafx.scene.shape.Rectangle(0,150,150);

        Media media = new Media(new File(/*Insert file name you own for testing purposes*/).toURI().toString());
        // The path I would use : "src\\main\\resources\\img\\Animated Titlescreen Background.mp4".
        // This is obtained using other classes and methods that read the computer directories,// so it works fine across different computers.
        MediaPlayer mediaPlayer = new MediaPlayer(media);
        mediaPlayer.setAutoplay(true);
        MediaView mediaView = new MediaView(mediaPlayer);

        pane.getChildren().addAll(mediaView,r);

        Scene scene = new Scene(pane,2560,1440);

        window.setScene(scene);

        window.show();
    }

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

解决方法

阅读更多关于 this link 的内容后,它说Windows 8 将 H.264 解码器分辨率提高到 4096x2304,JavaFX 版本 15.0.1 上可用。我使用的是 12.0.1 版,因为 Linux 15.0.1 版存在一个严重问题。

解决方案:将 JavaFX 版本提高到 15.0.1。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。