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

Mic*_*rry 27 java api video media-player

在环顾四周寻找一个体面的图书馆用Java播放视频之后,我已经不知所措了.周围的每个人都在尖叫不要使用JMF,因为它已经过时,过时而且需要用户安装它,其他替代品如VLCJ似乎很好,如果它们工作但仍然相对不稳定并依赖大量本机代码,并且至于处理DVD,在免费图书馆看起来像金尘!

当前选项:

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

基于以上(或其他任何你能想到的),人们会推荐哪些选项,还有其他任何我错过的合理选择吗?或者其他任何人认为可能在不久的将来可用?

Mic*_*rry 11

在对不同选项进行了大量研究并尝试了一些之后,我毕竟已经使用了VLCJ,但这里有一个问题 - 所有VLCJ的东西都是在进程VM中完成的.设置起来有点复杂(请参阅这里我是如何做到的)但是之后你可以抛出所有你喜欢它并且它工作得很好(目前使用3个没有稳定性问题的进程中的玩家.)

Xuggler非常棒,但遗憾的是我的水平太低了 - 重新发明轮子的数量(以及更糟糕的轮子)只需要通过寻找工作来回放我就可以了; 我觉得用它解决所有问题需要永远.对于编码/转码/其他低级视频工作虽然我全心全意地推荐它 - 最好毫无疑问.

用我选择的方法注意什么?好吧,如果外部虚拟机没有明确关闭,即使在应用程序退出后,它们也会在后台继续播放视频,并且这种方法调试变得更加困难.我还没有验证它在Mac上运行,我最初的建议可能不是因为我听说过MacOS不会让一个进程控制另一个窗口而没有本机代码的明确许可.尽管如此,这应该是可能的.

作为我正在研究的项目的一部分,我现在可能会看到我是否可以在一个使用VLCJ的简单Java视频框架中完成所有这些流程外功能.如果有人对此感兴趣(我不能承诺任何东西,除了我得到的兴趣越多,我就越有可能继续努力)然后随时让我知道!

所以在我的研究和调查结果之后,如果你只是想播放/录制/流式传输视频内容,我建议你选择VLCJ(但绝对使用过程中的播放器),如果你想做任何低级别的视频工作,我建议使用Xuggler.编解码器本身.在撰写本文时,没有一个好的,纯粹的Java解决方案,并且它可能会保持这种状态一段时间 - 幸运的是,尽管可以通过本地库交叉平台获得不错的结果.它只需要更多的工作!