我正在创建一个应用程序,用户可以自定义(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
之间快速翻转,但这需要用户拆分每一帧。
无论如何,我正在寻找建议。也许这个错误的潜在修复?有没有更好的选择?谢谢!