创建大量MediaPlayers时出现问题

时间:2017-01-25 02:13:28

标签: java javafx

我正在创建一个应用程序,用户可以自定义(mp4视频)动画(想想你可能会在保龄球馆看到的东西)。在常规使用期间,可能会有20到100个这样的动画加载。我的程序将从外部源接收输入,并且根据输入,这些动画中的一个将需要快速非常播放,我们在这里谈论不到十分之一秒。 ..

我正在使用JavaFX的MediaPlayer来完成此任务。为了防止缓冲时间,我决定让整个MediaPlayer与每个动画相关联。然而,当接近~20名球员时,这会引起问题。

虽然我不需要音频(事实上,我设置每个播放器在创建时静音),但JavaFX正在从操作系统中分配声音资源(您可以在OS调音台中看到,每个播放器都有一个滑块) 。当我接近上面提到的~20个玩家时,我将从玩家(存储在getException()中)抛出异常,如下所示:

MediaException: PLAYBACK_HALTED : Could not open audio device for playback.
    at javafx.scene.media.MediaException.haltException(MediaException.java:150)
    at javafx.scene.media.MediaPlayer$_PlayerStateListener.lambda$onHalt$7(MediaPlayer.java:2557)
    at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$5(GtkApplication.java:139)
    at java.lang.Thread.run(Thread.java:745)

(此错误是在Ubuntu 16.10上造成的,未在其他平台上测试过)

我猜这是由于分配的MediaPlayers的数量而导致操作系统因某种原因拒绝它。

由于质量下降,我不愿意使用GIF。我想另一种选择可能是在ImageView之间快速翻转,但这需要用户拆分每一帧。

无论如何,我正在寻找建议。也许这个错误的潜在修复?有没有更好的选择?谢谢!

0 个答案:

没有答案