我创建了一个基本的 JavaFX 媒体播放器。在我的 Windows 10 操作系统上,一切正常,并且完全按照预期运行。
private MediaPlayer initializeMediaPlayer(){
Media media = new Media(getClass().getResource("1-1.mp4").toString());
MediaPlayer mediaPlayer = new MediaPlayer(media);
mediaPlayer.setAutoPlay(true);
mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
mediaPlayer.setRate(1.25);
mediaPlayer.setMute(true);
return mediaPlayer;
}
然而,当我在 Windows 7 上运行此代码时,视频不会循环播放:它播放了五秒钟,在视频结束时,视频就冻结了。鉴于视频只有 5 秒长,循环对于该程序的正常运行是绝对必要的。
以下是我对这个问题的了解:
- 该问题仅在 Windows 7 上的 mp4 文件中存在。当使用 Oracle 的示例 .flv 文件运行程序时(即http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv),效果很好。无法将我的 mp4 文件转换为 flv。
- 该程序在我运行过的所有 Windows 10 计算机上运行良好。此问题仅出现在Windows 7中,但我没有在任何其他操作系统上测试过。我最终需要在只有 Windows 7 计算机的实验室中运行这个程序。
- 所有其他 MediaPlayer 参数(即设置自动播放、setMute 和 setRate)在 Windows 10 和 Windows 7 中都可以正常工作。只是 setCycleCount 属性似乎在 Windows 7 上不起作用。
- 在所有测试计算机上,我确保 Java 已更新到最新版本。我正在使用 Java 8 更新 144。
环境:
- 赢得 10 教授
- Java 8U144(但也使用 8U177 进行了测试)
我使用该网站上的 mp4 作为测试样本:技术幻灯片网站 http://techslides.com/sample-webm-ogg-and-mp4-video-files-for-html5
我的代码(注意:我使用自定义 FX 框架,所以我只向您展示设置播放器的控制器创建方法):
@Override
protected BorderPane createView() {
final BorderPane view = new BorderPane();
final Media media = new Media(getClass().getResource("small.mp4").toString());
final MediaPlayer player = new MediaPlayer(media);
player.setCycleCount(MediaPlayer.INDEFINITE);
player.setRate(1.25);
player.setMute(true);
player.setOnEndOfMedia(() -> {
player.play();
});
player.play();
final MediaView mediaView = new MediaView(player);
view.setCenter(mediaView);
return view;
}
我使用回调并手动启动重播。这作为一个无限循环工作,尽管这是更“复杂”的方法。另外,这对我也有用,应该被认为是更“正确”的方式:
@Override
protected BorderPane createView() {
final BorderPane view = new BorderPane();
final Media media = new Media(getClass().getResource("small.mp4").toString());
final MediaPlayer player = new MediaPlayer(media);
player.setAutoPlay(true);
player.setCycleCount(MediaPlayer.INDEFINITE); // or Integer.MAX_VALUE
player.setRate(1.25);
player.setMute(true);
final MediaView mediaView = new MediaView(player);
view.setCenter(mediaView);
return view;
}
附加说明:
- 我使用您链接的 Oracle 视频和
small.mp4
从技术幻灯片页面给出
- 如果它对您有帮助,我可能会发布完整的无框架代码,您可以将其放置在视频中以查看它是否可以工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)