在Java中处理视频(DVD,.avi.mkv)

2022-09-01 13:23:16

在四处寻找一个像样的Java视频库之后,我摆脱了困境。周围的每个人都在尖叫不要使用JMF,因为它已经过时了,过时了,需要用户安装它,其他替代方案,如VLCJ,如果它们可以工作,但仍然相对不稳定并且依赖于大量的本地代码,至于处理DVD,这似乎是在免费库中找到的金粉!

当前选项:

  • 现在JavaFX 2正在获得动力,这是我一直在认真研究的东西(因此我在这里的问题),但到目前为止,在试图弄清楚如何让它播放比标准FLV视频更多的内容方面,我没有运气。
  • VLCJ在它所做的事情上运作良好(请参阅我目前的答案),目前我正在继续前进。它使用libvlc来做任何事情,因为它可以播放几乎任何文件,也可以开箱即用地播放DVD。最大的问题是,您必须为每个播放器使用多个虚拟机才能使其稳定执行,这意味着响应相对较慢。我还没有这种方法在Mac上工作。
  • JMF已经过时了,很可怕,就我而言,这并不是一个真正的选择。我过去玩过它,但体验并不好!
  • FMJ表示,这是JMF的替代品。我还没有让它工作,就像我与之交谈过的大多数其他人一样,这本身就让我厌倦了它的质量和理解,即使我确实设法让它工作!
  • Xuggler在它所做的事情上很棒,它有很棒的教程,而且写得很好。但是,虽然它非常适合低级转码工作,但播放视频并以正确的顺序和同步等方式播放帧只是正常工作的噩梦,并且再次添加更多代码,这意味着更多的维护,潜在的更多错误等等。
  • 我还没有愤怒地尝试过GStreamer-Java,尽管它似乎不支持DVD播放(这是一个我正在开发的开源应用程序,所以商业插件也不是一个选择),它的编解码器支持似乎不是最广泛的。
  • JCodec是一个有趣的努力,是我见过的唯一一个从纯Java角度实现视频支持的工作 - 但目前缺乏对格式的支持,这是一个相对较新的项目。
  • 在我想要支持的每个平台的不同本机库中自己编写一些东西。这是绝对的最后选择,因为它需要额外的维护和编码时间。

根据上述内容(或您能想到的任何其他内容),人们会推荐哪些选项,还有其他我错过的明智选择吗?或者人们认为在不久的将来可能会提供的任何其他人?


答案 1

在围绕不同的选项进行了大量研究并尝试了一些之后,我毕竟已经选择了VLCJ,但这里有一个问题 - 所有VLCJ的东西都是在进程外VM中完成的。设置起来有点复杂(请参阅此处了解我是如何做到的),但是之后您可以随心所欲地投入所有操作,并且它工作得很好(目前使用3个没有稳定性问题的进程外播放器)。

Xuggler很棒,但不幸的是,对我来说水平太低了 - 重新发明轮子(以及更糟糕的轮子)需要大量的重新发明,只是为了通过寻求工作来获得回放,这让我有些失望;我觉得需要永远才能解决所有问题。对于编码/转码/其他低级视频工作,尽管我衷心推荐它 - 毫无疑问是最好的。

我选择的方法有什么注意事项?好吧,如果外部 VM 未显式关闭,则即使在应用程序退出后,它们仍将继续在后台播放视频,并且使用此方法进行调试变得更加困难。我也还没有验证它在Mac上运行,我最初的建议可能不是因为据我所知,MacOS不允许一个进程在没有明确许可的情况下控制另一个进程的窗口。不过,这应该可以通过一些工作来实现。

作为我目前正在从事的项目的衍生产品,我可能会看看我是否可以在一个简单的Java视频框架中总结所有这些进程功能,该框架在下面使用VLCJ。如果有人对此感兴趣(我不能承诺任何事情,但我得到的兴趣越多,我就越有可能为此而努力),那么请随时让我知道!

因此,在我的研究和发现之后,如果您只想播放/录制/流式传输视频内容,我建议您使用VLCJ(但绝对使用进程外播放器),如果您想使用编解码器本身进行任何低级视频工作,则建议使用Xugler。在撰写本文时,还没有一个好的,纯Java解决方案,它可能会保持这种状态一段时间 - 幸运的是,尽管跨平台的本机库可以获得不错的结果。它只是需要更多的工作!


答案 2

我在我的一些项目(ffmeg java绑定)中使用了jffmeg,到目前为止我还没有遇到任何问题。http://jffmpeg.sourceforge.net/documentation.html。我也使用qt-jambi,但从未尝试过它的视频库(phonon),这也可以解决你的问题。


推荐