我目前在一个项目中使用Javafx 2,我可能需要长时间无限循环播放一个视频。在windows上,当视频播放时,我的proifiler工具显示非常正常的图片,cpu负载不是很重(在2个内核上运行时约为2x40-50%),内存使用峰值约为250 MB,这是正常的。但是,当我在Ubuntu机器上部署应用程序时,每个内核的cpu负载达到70%左右(尽管它是一个双核atom处理器,所以假设这是正常的),内存使用量不断增加,最终在1.5-2小时内杀死JVM和设备本身。我真的需要一个解决方案,或者至少是这个问题的变通办法,因为它现在是一个阻碍。
我目前正在考虑破解无限循环,并为每个循环创建一个新的Media/MediaPlayer对象,但我不确定它是否会解决这个问题。
你能给我一些关于这个问题的见解吗?
我初始化媒体视图的代码:
final Media m = new Media(new File(new ClientParameters().getProperty("video.path", String.class)).toURI()
.toString());
final MediaPlayer player = new MediaPlayer(m);
player.setMute(true);
player.setCycleCount(MediaPlayer.INDEFINITE);
player.setOnError(new Runnable() {
@Override
public void run() {
log.warn("Video error", player.getError());
Main.loadAcceptablePrompt(Main.getCurrentLocaleResources().getString("Video_Hiba"),
FxmlView.START_SCREEN, Main.DEFAULT_LOCALE, ScreenSaverVideoController.this);
}
});
m.setOnError(new Runnable() {
@Override
public void run() {
showLoader();
Main.getScheduler().submit(new Runnable() {
@Override
public void run() {
log.warn("Video error", player.getError());
Main.loadAcceptablePrompt(Main.getCurrentLocaleResources().getString("Video_Hiba"),
FxmlView.START_SCREEN, Main.getCurrentLocale(), ScreenSaverVideoController.this);
}
});
}
});
video.setMediaPlayer(player);
video.getMediaPlayer().play();
Main.getScheduler()返回这个Scheduler对象:
private static final ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(1);
Main.loadAcceptablePrompt首先调用以下函数,然后加载新的fxml视图:
if (timeoutFuture == null || timeoutFuture.isCancelled() || timeoutFuture.isDone()) return false;
return timeoutFuture.cancel(true);
这是一个超类的函数,在这种情况下timeoutFuture为null。无论如何,在这个场景中不会调用这个函数。
编辑:在我的Windows机器上,峰值内存使用率似乎也在缓慢上升,但远没有达到Ubuntu机器上的速度。现在我让它在晚上运行,之后我会更新情况。
编辑2:在Windows上运行应用程序一晚后,它仍然运行,没有任何问题。
每次视频结束时,我都尝试重新加载媒体播放器页面,但没有任何变化,内存仍然在 2 小时内用完。
我创建了一个新的jar,只在起始页上有一个MediaView,里面没有其他内容,打包了jfxrt。我在Windows机器上使用的jar文件,它仍然泄漏。
机器上使用的JRE是oracle-java7-安装程序包安装的那个。我尝试过使用OpenJDK,但运行应用程序失败。
用于播放视频的库是由libavformat53包安装的。没有它,在尝试播放视频时出现异常。据我所知,这个包是由VLC使用的,没有错误,所以我很恼火。
当我最后一次在台式电脑上安装Linux(Ubuntu或Debian)时,大概是3或4年前,我在任何需要显卡的东西上都遇到了类似的问题。原因是对于图形应用程序,Linux发行版只能快速工作
这可能不是一个可以接受的问题,但我现在非常绝望。 我需要一个同步java媒体播放器与快速寻找和平衡修改。 脚本: 我有一个javaFX项目,我必须在循环中播放一个非常短(50-100毫秒)的媒体文件。问题是,在重新启动之前,我需要等待一些要求。 简而言之:播放声音- javafx提供了一个我修改过的媒体播放器。 如果有人能为我指出正确的方向(图书馆/我错过的东西),我将不胜感激 ps允许的java
我正在开发一个包含一些音频播放器的RecyclerView的应用程序。应用程序将下载。3gp文件(如果尚未下载)。 当我单击playAudio按钮时,音频未被播放。 这是我的适配器代码: 我怎样才能解决这个问题?
1.1.1. 多媒体播放 1.1.1. 多媒体播放 我们事实上对上游芯片厂商自带的播放器方式做了调整。 Amlogic 芯片 BaseCode 我们禁用了芯片厂商的原生代码的 libplayer 包,原因是芯片厂商的播放器是直接使用 ALSA 框架来调用音频播放功能的。 这对我们 RokidOS 平台让多个进程使用音频设备造成阻碍。基于这个因素,我们使用了 RokidOS 开发的媒体播放库 lib
当我使用MediaPlayer播放mp3文件时,系统会报告错误日志:。但是RealPlayer是正常的。 我发现它的错误只发生在更高的ROM版本。像4.0版本一样,它有错误。在2.3版中,它没有这个错误。 代码: 日志猫错误:
媒体播放器类很好。然而,我无法播放存储在另一个类中的mp3文件(当鼠标单击时)。有人能检查我的密码吗? 这是我尝试用来播放音频文件的类: 当我运行程序时(在下面勾选的鼠标上),我得到了以下两个错误:错误1:线程“AWT-EventQueue-0”java.lang中的异常。不支持的操作异常:尚未实现错误2:线程“thread-3”java.llang中的例外。IllegalStateExcepti
1367[AWT-EventQueue-0]信息uk.co.caprica.vlcj.binding.libvlcfactory-libvlc:c:\program files\videolan\vlc\libvlc.dll 2061[AWT-EventQueue-0]错误uk.co.caprica.vlcj.player.DefaultMediaPlayer-未能为“SimpleMedia[mr