vlcj/LibVLC 需要重量级 AWT 组件来渲染其视频。
OSX 上的 JDK 1.7 及更高版本中不再有任何 AWT。 OSX 上的 UI 工具包现在完全是轻量级的。
因此在 OSX 上使用 vlcj 的最佳方式不再有效。
你要做的就是使用所谓的“直接”媒体播放器 [1]而不是“嵌入式”的。
使用直接媒体播放器的缺点是您必须以某种方式自己渲染视频,使用 BufferedImage、硬件加速的易失性图像、PixelWriter 或其他东西。
这种方法通常会使用更多的内存和CPU,并且有点不方便。
从好的方面来说,使用这种方法可以实现流畅的高清视频播放。
另外,从好的方面来说,如果您愿意,您可以以某种方式处理视频缓冲区,并使用这种方法轻松地将轻量级小部件/标签覆盖在视频顶部。
vlcj 测试源中提供了一个示例,展示了如何执行此操作的一种方法(这里有太多代码需要重现,所以我将提供稳定的链接 [2]).
网上也有很长的讨论项目问题跟踪器 [3]关于这个话题。
[1] http://caprica.github.io/vlcj/javadoc/3.0.0/uk/co/caprica/vlcj/player/direct/DirectMediaPlayer.html
[2] https://github.com/caprica/vlcj/blob/vlcj-3.0.1/src/test/java/uk/co/caprica/vlcj/test/direct/DirectTestPlayer.java
[3] https://github.com/caprica/vlcj/issues/205
令人惊讶的是,有一个潜在的解决方案,尽管显然不是最理想的,即使用 Wine 在 OSX 上使用 Windows 1.7/1.8 JVM。我没有尝试过,但有人告诉我它有效。