Java中的媒体播放器库

20

我正在评估Java中用于播放音频/视频的库。它不需要是100%的Java;对本地库的Java绑定也完全可以接受。只要能在Java组件上渲染视频,就可以使用可从Java控制的外部应用程序。

目标平台是Linux。Windows支持是一个优点,但不是必需的。

我已经使用了VLCj绑定来试用VLC,总体表现还不错,但在压力下偶尔会崩溃。我也尝试过在slave模式下使用mplayer,效果也不错。但我想评估其他选项。

以下是要求:

  • 通过RTSP实时播放H.264、MPEG4。如果支持HTTP的MJPEG则加分。
  • 能够在Java(Swing或AWT)组件上渲染视频
  • 开源并且处于活跃更新状态
  • 稳定可靠

有什么建议吗?

3个回答

15

好的,我花了一个月的时间尝试了几个选项,以下是结果:

  1. VLC。这是我最先想到的,因为每个人都说它“支持所有格式”。我使用过VLCj Java绑定和内置的远程接口-I rc)。总体上,我发现它运行得相当不错,但也有一些问题。在重负载下会偶尔崩溃(这不是VLCj的问题,因为直接使用二进制文件时也会出现此问题)。此外,与其他选项相比,我发现其内存消耗相对较高。

  2. MPlayer。在我的经验中,它的性能优于VLC,没有崩溃,内存消耗更低。没有Java绑定,但slave模式非常好用。

  3. GStreamer。非常强大,非常灵活,同时易于入门。我尝试过Java绑定和从Java运行gst-launch二进制文件。这两种方法都表现得非常优秀。

  • Xuggler 看起来不错,但是根据常见问题中所述,它似乎存在 RTP 方面的问题。由于 GStreamer 和 MPlayer 的表现都很出色,因此我没有继续深入研究 Xuggler。

  • 在满足要求的情况下,我发现 GStreamer 是最好的解决方案,MPlayer 是第二选择。


    1
    Xuggler已经被弃用,它被HumbleVideo (https://github.com/artclarke/humble-video)取代。自2015年1月3日(最后一次提交)以来,HumbleVideo处于休眠状态... - Stephan

    3

    我知道gstreamer,但我没有使用它的经验。你用过吗?你能分享一下你的经验吗? - Grodriguez

    2
    我也花了一段时间研究我的选项,我最终得出结论:VLCJ是最佳选择。然而,这里有一个关键问题,你需要将其作为进程运行(特别是在使用多个播放器时),才能确保它100%可靠。这就是我采取的方法,我还没有看到它崩溃。以这种稳定的方式,它还具有其他优点:
    • 它可以播放几乎任何东西。是的,这有点老生常谈,但包括DVD、Youtube视频,几乎任何视频文件等等。
    • 应该支持Linux / Mac / Windows,尽管我还没有验证Mac是否工作。
    • 积极维护,并且如果您在讨论组中提出一个好的(即深思熟虑的)问题,所有者在我的经验中经常在一分钟内回复!
    • 开源,谷歌小组在撰写本文时活跃。
    • 使用所有VLC的图形加速功能
    • 能够播放任何重量级画布组件(如果您使用直接播放器,则可以获得BufferedImage以在任何地方显示,甚至在JOGL 3D领域中,如果您那么疯狂!

    我还没有发现它在资源方面太重,尽管我没有进行任何彻底的测试(但三个播放器在我的四年基本笔记本电脑上很好地协同工作,即使是我的相对耗电量较大的应用程序!)

    缺点?没有官方的进程外播放器框架,因此您必须自己构建一个(请参见这里了解如何实现)。有时需要做一些调整才能让它正常工作。但就我所看到的,到目前为止,它对我来说运行良好!


    非常有趣,特别是有关在进程外运行它的提示。我需要再看一下这个。不过,我想指出我遇到的崩溃问题也可以通过VLC二进制文件进行复现。因此,这并不是一个仅限于VLCj的问题。感谢分享你的经验! - Grodriguez
    1
    我可能需要再回去检查一下VLCj。你的反馈很鼓舞人心(我也必须说到目前为止我非常满意GStreamer :))。 - Grodriguez
    1
    我已经使用libVLC(v.1.2.0)测试了VLCJ,在同一进程中同时运行4个“直接”流视频...到目前为止,一切顺利。 - ee.
    @berry120 谢谢。在你的情况下,你是打算让你的应用程序运行更长时间吗:比如超过一天? - ee.
    澄清:与工作集(物理内存)相比,这些线程随着时间的推移将消耗相当大量的私有字节(虚拟内存)。 - ee.
    显示剩余5条评论

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接