JavaFX MediaView渲染2560x1440分辨率MP4视频显示空白的解决方法
TL;DR:将JavaFX版本升级至15.0.1即可解决该问题。
问题背景
以下为整理后的完整问题描述,此前的问题表述不够清晰完整。
- 操作场景:使用JavaFX创建Media和MediaView组件,在场景中渲染.mp4格式的视频文件。
- 问题现象:播放2560x1440分辨率视频时屏幕始终显示空白。
- 预期效果:视频能够正常渲染,用户可正常查看播放内容。
已尝试的排查手段
- 修改文件编码格式:从H.264改为QuickTime编码,输出为.mov格式
- 结果:JavaFX无法识别QuickTime编码格式
- 调整视频帧率:在30FPS和60FPS之间切换测试
- 结果:无任何改善
- 缩短视频时长减小文件体积测试
- 结果:无任何改善
- 修改视频宽高比:从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(); // 示例:向面板添加简单图形可正常显示 javafx.scene.shape.Rectangle r = new javafx.scene.shape.Rectangle(0, 0, 150, 150); Media media = new Media(new File(/*此处插入你本地的测试文件路径*/).toURI().toString()); // 原使用路径示例 : "src\\main\\resources\\img\\Animated Titlescreen Background.mp4" // 该路径通过其他读取系统目录的类和方法获取,可在不同设备上正常工作 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); } }
内容的提问来源于stack exchange,提问作者Nephty
相关产品推荐
相关产品推荐

