我正在尝试 vlcj 库,但遇到视频调整问题。详细来说, JVM会在视频结束或停止而没有先禁用视频调整的情况下崩溃。
如文档中所述,我在视频开始播放后启用视频调整。之后,我可以毫无问题地更改饱和度,色相和其他参数。
我尝试在收到STOPPED或FINISHED事件后立即禁用视频调整,但这不能解决问题。
我使用的是VLCj 4.1.0,启用视频调整的代码如下。
this.mediaPlayerComponent.mediaPlayer().video().setAdjustVideo(true);
[UPDATE 1] :
以下代码重现了该问题。视频结束时,发生崩溃。 请注意,如果将最后一行注释掉,则不会发生崩溃。
import javax.swing.JFrame;
import uk.co.caprica.vlcj.player.component.EmbeddedMediaPlayerComponent;
public class SelfContainedMediaPlayer {
private final JFrame frame;
private static SelfContainedMediaPlayer selfContainedMediaPlayer;
private final EmbeddedMediaPlayerComponent mediaPlayerComponent;
public static void main(final String[] args) {
selfContainedMediaPlayer = new SelfContainedMediaPlayer();
}
public SelfContainedMediaPlayer(){
frame = new JFrame("My First Media Player");
frame.setBounds(100, 100, 1920, 1080);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
frame.setContentPane(mediaPlayerComponent);
frame.setVisible(true);
mediaPlayerComponent.mediaPlayer().media().play("path to video");
mediaPlayerComponent.mediaPlayer().video().setAdjustVideo(true);
}
}
关于我的环境的更多细节。
有什么建议吗? 谢谢
[更新2]:
我发现了问题。
正如我在下面的评论之一中所预期的那样,我正在测试发现here的 vlcj-player 应用程序,但我发现该应用程序不存在问题。
经过一番挖掘,我发现包含视频的JFrame
需要一个TransferHandler
。
因此,仅通过将TransferHandler
实例传递到如下所示的框架即可解决该问题。
frame.setTransferHandler(new CustomTransferHandler());
CustomTransferHandler
是扩展TransferHandler
的类。
不幸的是,我仍然不明白为什么这会导致JVM崩溃。