java - 将其他视频编解码器/DVD支持添加到JavaFX 2.2

标签 java video javafx codec vlcj

更新:

由于JFX的媒体方面是开源的,因此我本人对此进行了调查,确实可以,但是需要更改和重建JFX源(包括Java和C部分)。here描述了该过程,适用于任何想要-我在该示例中添加了MKV支持,但对于其他插件,它应该非常相似。

因此,该问题的其余部分主要是历史性的,但我在这里留作引用。

背景

到目前为止,我一直在使用VLCJ在应用程序中播放视频。它可以工作,但是如果可能的话,我想看看我是否可以通过迁移到JavaFX并为自己节省多个VM的麻烦来实现对通用编解码器的类似支持,例如VLCJ需要可靠地播放多个视频。我不会在这里讨论,但是如果您对详细信息感兴趣,请参阅我对this问题的回答。还存在跨平台兼容性的问题,它可以在Mac和Linux上正常运行,但是我还没有弄清楚如何使其在Mac上显示(我相信存在一些安全措施,可以防止一个进程访问另一个本地进程的访问权限组件,但这再次超出了此问题的范围。)

归结为这样一个事实,即它在工作时需要大量维护,并且在使用多个VM时麻烦,并且如果有另一种解决方案更容易稳定地桥接它们。 VLC确实具有传奇般的支持水平,可以播放几乎所有内容,这就是为什么我迄今为止一直使用它,我很想知道我是否可以在JavaFX中获得类似的结果-或者至少可以提供以跨平台方式执行此操作的方法。

研究

JavaFX 2.0支持视频-太棒了!但目前官方线路是它支持“包含VP6视频和MP3音频的FLV”。有没有一种方法可以扩展它以增加对更多编解码器的支持?我没有想要支持的硬编解码器,更多情况是尽可能多的,因此我正在寻找一种可扩展的方法来解决上述问题。

我想知道它是否会播放本地安装在计算机上的编解码器的视频,并且它只是不会自己宣传(因为功能显然是与机器相关的,而不是跨平台的。)但是没有骰子,我尝试了很多常见的格式,它确实拒绝播放其声明以外的任何内容。

通过查看JavaFX 1.3,可以看到also supports other platform dependant codecs depending on where it's installed。有没有办法使用JavaFX 2来获得这种行为?还是完全计划用于后续版本?我还没有在路线图上找到任何信息,也没有得到Oracle的任何评论。

通过广泛搜索,我唯一能找到的就是here,它意味着可能,但是似乎没人知道如何做。我也想知道它是否基于GStreamer,为什么默认情况下也不包含GStreamer支持的所有格式?

就用JavaFX播放DVD而言,我绝对是无能为力,所以我认为目前这只是一事无成。但是,如果有人有任何想法或信息,我将不知所措。

其他方法

我半想知道的一种方法可能是像here所述将JMC jar从旧的JavaFX中 pry 出来,并试图使其与JavaFX 2一起工作。我不认为有人对这种方法或类似方法有任何运气吗?

一切都失败了,如果任何人都拥有开箱即用的支持/何时支持其他编解码器的信息或链接,那么我也很想听听。或者,如果有人对Oracle的某人有任何联系方式,我也想问一问,不胜感激!我一直渴望在Java中提供体面的视频支持,而我想这归结为试图弄清JavaFX是否可以解决此问题,或者只是半心半意的尝试,它永远不会发挥更多的功能现在呢!我希望不是后者,但是我还没有看到太多可以证明这种情况的信息。

最佳答案

相信我,我感到并且知道您的无奈。我已经考虑了一段时间,但是我不得不使用非直截了当的方法来解决我的问题。

有许多解决方法,每种方法都有局限性,但要取决于对您有用的方法:

  • 文件称WebView可与HTML5一起使用,HTML5可播放平台上支持的视频(尽管遗憾的是不闪光)。如果使用网络 View 播放视频适合您,则可以尝试一下。您甚至可以在其他节点上绘制它。
  • 便携式VLC播放器!如果也许您正在开发某种投影仪/导演应用程序并且想要全屏视频,则可以让便携式VLC播放器在一个屏幕上以全屏模式播放视频,而在另一屏幕上则以控件播放。使用了此解决方案,它在Mac和Windows上都非常有效。 :)
    唯一的问题是,您无法在视频上绘制节点,因为它是外部应用程序,只有您的应用程序全屏视频的错觉。
  • 如果您需要在javafx 2.0应用程序中利用Flash的强大功能,请使用基于swt的浏览器(如果您是Swinger,则使用DJ Project之类的东西),因为它们支持 native 浏览器的所有功能。
  • 关于java - 将其他视频编解码器/DVD支持添加到JavaFX 2.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8153227/

    相关文章:

    java - Windows 上的 Ruby 32 位和 Java 64 位

    JavaFX 属性 : Overriding getBean() method?

    video - 使用 libav 而不是 ffmpeg

    java - 运行 JavaFX Maven 插件(修复类路径)后 javafx.application.Application 出现 NoClassFoundException

    java - 实现基于节点的图形 GUI 的最佳/最简单方法?

    java - 使用流将列表的集合与单个值结合起来

    java - 在 Canvas 上看不到圆圈

    java - 这是将 MVVM 结构与 ViewModel 和 RecyclerView 一起使用而没有任何问题的正确方法吗?

    xcode - MP4 类型的 NSURL 出现 fatal error

    html - 在 HTML5 视频中获得 >24 fps 的帧率?