在寻找一个体面的图书馆来播放Java视频之后,我已经不知所措了。周围的每个人都在尖叫不要使用JMF,因为它已经过时,过时而且需要用户安装它,其他替代品如VLCJ似乎很好,如果它们工作但仍然相对不稳定并依赖大量本机代码,并且至于处理DVD,在免费图书馆中看起来像金尘!
基于以上(或您能想到的任何其他内容),人们会推荐哪些选项,还有其他任何我错过的合理选项吗?或者其他人认为在不久的将来可能有其他人可用?
答案 0 :(得分:11)
在对不同选项进行了大量研究并尝试了一些之后,我毕竟已经使用了VLCJ,但这里有一个问题 - 所有VLCJ的东西都是在进程VM之外完成的。设置起来有点复杂(请参阅here我是如何做到的),但之后你可以抛出所有你喜欢它并且它工作得很好(目前使用3个没有稳定性问题的进程中的玩家。)
Xuggler很棒,但不幸的是我的水平太低了 - 重新发明轮子的数量(以及更糟糕的轮子)只需要通过寻找工作来回放我就会有所帮助;我觉得用它解决所有问题需要永远。对于编码/转码/其他低级视频工作虽然我全心全意地推荐它 - 最好毫无疑问。
我选择的方法注意事项?好吧,如果外部虚拟机没有明确关闭,即使在应用程序退出后,它们也会在后台继续播放视频,并且使用这种方法调试变得更加困难。我还没有验证它在Mac上运行,我最初的建议可能不是因为我听说过MacOS不会让一个进程控制另一个窗口而没有本机代码的明确许可。这应该可以通过一些工作来实现。
作为我正在研究的项目的一部分我现在可能会看到我是否可以在一个使用VLCJ的简单Java视频框架中完成所有这些流程外功能。如果有人对此感兴趣(我不能保证除了我得到的更多兴趣,我就越有可能继续工作)然后随时让我知道!
因此,在我的研究和调查结果之后,如果您只想播放/录制/播放视频内容,我会建议您使用VLCJ(但绝对使用流程外播放器),如果您想要播放Xuggler想要使用编解码器本身进行任何低级视频工作。在撰写本文时,没有一个好的,纯粹的Java解决方案,并且它可能会保持这种状态一段时间 - 幸运的是,尽管可以通过本地库交叉平台获得不错的结果。它只需要更多的工作!
答案 1 :(得分:2)
我在我的一些项目(ffmeg java绑定)上使用了jffmeg,到目前为止我还没遇到任何问题。 http://jffmpeg.sourceforge.net/documentation.html。我也使用qt-jambi,但从未尝试过它的视频库(phonon),这也可以解决你的问题。
答案 2 :(得分:1)
我同意远离JMF。特别是如果你想播放DVD。甚至JMF也依赖于本机代码来实现其某些功能。无论如何,你无论如何都无法摆脱某种原生依赖。另一种选择是FMJ。它是JMF的开源版本。我虽然没有太多运气。
我的建议是与VLCJ合作。当我需要媒体解决方案时,我正在探索这个问题。不幸的是它是在GPL下发布的,所以我不能在我的应用程序中使用它,但它似乎应该能够处理你想要的东西。
另外,我的另一篇文章可能对您感兴趣。 Link
此外,this可能有用。
答案 3 :(得分:1)
您是否尝试过使用JavaFX API?
我认为它的方式JavaFX包括对H.264播放的支持......在这里有人展示如何在Google的新开源WebM / VP8中播放视频
http://javafxplace.blogspot.com/2010/06/javafx-and-webm-on-linux.html
答案 4 :(得分:1)
答案 5 :(得分:1)
我可以推荐gstreamer-java绑定。顾名思义,它将GStreamer API包装在Java类中。这样您就可以访问GStreamer提供的媒体处理图形功能。如果您想要执行更高级的任务(如转码),这可能非常简洁。
另外,如果我没记错的话,GStreamer有一个支持DVD播放的商业插件,并附带了CSS许可证。如果这对您的用例无关紧要,您也可以随时使用开源软件(我唯一需要的那个)。
答案 6 :(得分:0)
我当前正在使用OpenImaj库http://openimaj.org/tutorial,其中有一个
XuggleVideo and XuggleAudio class
我建议您使用它并实现自己的线程机制来播放它们。我目前正在开发一种媒体播放器,希望自从
以来,它能够很好地播放“流行”视频格式VideoDisplay class
在库中做得很好,但播放有点断断续续,库的实现考虑到了摆动并附加了
ImageComponent
由于JavaFx中的某种原因,到摆动节点似乎不起作用,但是我现在可以从显示的视频中获取图像,我希望我对此感到幸运。