【问题标题】:Media player libraries in Java [closed]Java中的媒体播放器库[关闭]
【发布时间】:2010-10-07 21:35:16
【问题描述】:

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

目标平台是 Linux。 Windows 支持是加分项,但不是必需的。

我曾使用VLCj 绑定玩过 VLC,它总体上运行良好,但在压力下偶尔会崩溃。我也在slave mode中使用过mplayer,看起来不错。但我也想评估其他选项。

这些是要求:

  • 使用 RTSP 通过 RTP 实时播放 H.264、MPEG4。 MJPEG over HTTP 的加分项。
  • 能够在 Java(Swing 或 AWT)组件上呈现视频
  • 开源,积极维护
  • 稳定、坚如磐石

建议?建议?

【问题讨论】:

    标签: java streaming media-player


    【解决方案1】:

    好的,上个月我玩了几个选项,结果如下:

    1. VLC。这是我的第一个想法,因为每个人都在说它“播放一切”。我使用了VLCj Java 绑定和内置的remote interface (-I rc)。我发现这通常工作得很好,但有一些问题。我一直在重负载下看到偶尔的崩溃(不是 VLCj 的错,因为直接使用二进制文件时也会发生这种情况)。此外,我发现与其他选项相比,内存消耗相对较高。

    2. MPlayer。根据我的经验,这实际上比 VLC 表现更好,没有崩溃,内存消耗更低。没有 Java 绑定,尽管 slave mode 工作得很好。

    3. GStreamer。非常强大,非常灵活,同时仍然很容易上手。尝试了 Java bindings 并从 Java 运行 gst-launch 二进制文件。这两种方法都非常有效。

    4. Xuggler 看起来不错,但 RTP 似乎存在问题(如 in the FAQ 所述)。由于 GStreamer 和 MPlayer 都运行良好,我没有通过最初的研究。

    我发现 GStreamer 是满足要求的最佳解决方案,MPlayer 是第二选择。

    【讨论】:

    • Xuggler 已弃用。它被 HumbleVideo (github.com/artclarke/humble-video) 取代。自 2015 年 1 月 3 日(最后一次提交)以来,HumbleVideo 处于休眠状态 ...
    【解决方案2】:

    你看过gstreamer吗?

    【讨论】:

    • 我知道 gstreamer,但我没有使用它的经验。你用过吗?你能分享你的经验吗?
    【解决方案3】:

    我也花了一些时间研究我的选择,实际上我得出的结论是 VLCJ 是最好的选择 - 但关键是,你需要将它运行在进程之外(尤其是在有多个玩家的情况下)它为您提供 100% 可靠的操作。这就是我正在采取的方法,我还没有看到它崩溃。以这种方式坚如磐石,它还具有其他优势:

    • 它几乎可以播放任何东西。是的,这有点陈词滥调,但这包括 DVD、Youtube 视频,几乎所有视频文件......
    • 应该支持 Linux / Mac / Windows,虽然我还没有验证 Mac 是否工作。
    • 积极维护,根据我的经验,如果您在讨论组中提出一个好的(深思熟虑的)问题,业主通常会在几分钟内回复!
    • 开源,在撰写本文时,Google 群组的活跃度很高。
    • 使用 VLC 的所有图形加速功能
    • 能够播放任何重量级的 Canvas 组件(如果您使用直接播放器,您可以让 BufferedImage 显示在任何您喜欢的位置,即使在 JOGL 3D 领域,如果您那么疯狂!

    虽然我没有进行任何彻底的测试,但我也没有发现它在资源方面的负担那么重(但是 3 名玩家协同工作以及我在 4 岁的基本笔记本电脑上相对耗电的应用程序) !)

    缺点?没有针对进程外播放器的官方框架,因此您必须自己构建一个(请参阅here 了解我是如何做到的)。而且你有时必须做一些摆弄才能让它工作。但据我所知,到目前为止它对我来说效果很好!

    【讨论】:

    • 非常有趣,尤其是在进程外运行的提示。我需要再看看这个。我仍然想指出,我遇到的崩溃也可以通过 VLC 二进制文件重现。因此不是 VLCj 特有的问题。感谢您分享您的经验!
    • @Grodriguez 我必须承认,我无法以这种方式重现任何崩溃 - 您是否考虑过为 libvlc 提交错误报告?这些崩溃是否发生在 libvlc 的新版本 2 中(我一直在使用它而没有任何问题,即使它处于测试阶段。)当然,进程外方法的优点是,如果它确实关闭了 VM,你可以默默地调出一个新的,并在您的应用程序中显示适当的消息。出于这个原因,我将所有播放器都运行在进程之外(即主虚拟机中甚至没有一个)。
    • 我可能需要返回并再次检查 VLCj。您的反馈很鼓舞人心(我还不得不说,到目前为止,我对 GStreamer 非常满意 :)
    • 我已经使用 libVLC (v.1.2.0) 在同一进程中同时运行 4 个“直接”流媒体视频测试了 VLCJ...到目前为止一切顺利
    • @ee 问题在于,大部分你可能会没事,但有时你不会——而且不能保证什么时候会发生,除了从可能性来看,它会每隔一段时间。如果它是一个意味着你可以忍受偶尔崩溃的应用程序,这很公平,但如果你希望它坚如磐石,那么进程中的方法将永远不会削减它......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多