【问题标题】:Video playback in Java ( JMF, Fobs4JMF, Xuggler, FMJ )Java 中的视频播放(JMF、Fobs4JMF、Xuggler、FMJ)
【发布时间】:2010-01-11 12:50:02
【问题描述】:

我需要用 Java 播放简单的视频。

这是我的要求:

  • 生产质量

  • 打开和解码我可以选择视频和音频编解码器的视频文件。 IE 我可以选择表现良好的编解码器。

  • 能够播放暂停seekToFrameseekToTime停止 播放。本质上,我希望能够以非线性方式播放单个视频文件的片段。例如我可能想播放 20.3sec 到 25.6sec 的片段,暂停 10 秒然后播放 340.3sec 到 350.5sec 的片段,等等。

  • 在播放过程中,视频和音频必须同步。

  • 视频必须在 Swing JComponent 中显示。

  • 必须能够在商业产品中使用,而不必是开源的(即 LGPL 或商业是好的)


我的研究使我找到了以下解决方案:

我已经实现了一个快速原型,这似乎可以满足我的需要。我可以使用以下方式播放一段视频:

player.setStopTime(new Time(end));
player.setMediaTime(new Time(start));
player.start();

虽然 Fobs4JMF 似乎可以工作,但我觉得代码质量很差,项目不再活跃。有谁知道使用 Fobs4JMF 的产品吗?


  • 编写一个播放视频的 Flash 应用程序并使用 JFlashPlayer 将其引入我的 Java Swing 应用程序

与 Java 不同,Flash 在播放视频方面表现出色。我可以使用以下方法编写一个小型 Flash 应用程序:

open(String videoFile),
play(),
pause(),
seek(int duration),
stop()

然后使用 JFlashPlayer 将其引入 Java,它可以从 Java 中调用 Flash 函数。

我喜欢这个解决方案的一点是,在 Flash 中播放视频应该坚如磐石。有人用 JFlashPlayer 用 Ja​​va 播放视频吗?


  • 在 Xuggler 之上编写一个简单的媒体播放器

Xuggler 是一个用于 Java 的 FFMpeg 包装器,它似乎是一个非常活跃和高质量的项目。但是,实现需求中描述的简单视频播放并非易事(特别是 Seeking),但在 MediaTools MediaViewer 中已经完成了一些工作,这将是构建的基础。


  • 使用 FMJ

我试图让 FMJ 工作,但到目前为止没有成功。


感谢您对我的问题提出意见。

【问题讨论】:

    标签: java video jmf playback fmj


    【解决方案1】:

    兄弟可以为Xuggler大喊大叫吗?

    【讨论】:

    • 我需要很多关于 xuggle 的帮助,如何在 xuggle 中添加两个视频来创建一个视频?我正在尝试谷歌,但它没有多大帮助......
    • Xuggler 的实际下载链接到底在哪里?!
    • Xuggler 无法为 mp3 或 m4a 寻找关键帧。那是 ffmpeg 标头丢失的问题。
    • 不幸的是 Xuggler 不再积极开发:xuggle.com/xuggler/status
    【解决方案2】:

    在我看来,VLCJ 是这类事情的前进方向。我喜欢 Xuggler 的编码/转码工作,但不幸的是,做简单的播放和解决所有同步问题等等实在是太复杂了——而且这样做感觉就像在重新发明轮子。

    VLCJ 唯一的问题是,为了让它能够可靠地与多个播放器一起工作,我不得不求助于进程外播放器。该框架并不是世界上最简单的东西,但是当它在那里时,它可以很好地工作。我目前在我的应用程序中并排运行 3 个进程外播放器,没有任何问题。

    另一个需要注意的是,嵌入式媒体播放器不能与摆动组件一起使用,而只是一个重量级的画布——但这对我来说根本不是问题。如果是这样,那么您可以使用直接媒体播放器获取缓冲图像并将其显示在您选择的任何内容上,但它会更多地占用您的 CPU(尽管不会比采用这种方法的其他播放器更多。)

    【讨论】:

      【解决方案3】:

      JavaFX 内置了许多可用的视频和音频编解码器。这可能是目前获得最广泛支持的解决方案。

      【讨论】:

      • 您好,jsight,感谢您的回答。我确实知道 JavaFX 支持视频,但不幸的是我不得不放弃它,因为很难将 JavaFX 组件导入 Java Swing 应用程序。有一些方法,但它们是不受支持的黑客攻击。
      • 感谢这些链接。看来除了Java中没有官方对JavaFX的支持外,还会存在分发问题(尤其是与视频编解码器有关)
      • @kpsullivan - 任何其他免费解决方案的分发或支持问题都会变得更糟。
      • Xuggler 和 Fobs4JMF 等基于 FFMpeg 的解决方案存在哪些分发问题? Xuggler 在直接从开发人员那里获得响应方面似乎非常活跃。此外,我们并不局限于免费的解决方案。
      【解决方案4】:

      我使用 jffmpeg 的方式与使用 FOBS 的方式相同,虽然我没有对它们进行比较,但效果很好。

      我也希望看到一种像 JavaFX 那样与本机编解码器交互的简单方法,但 JavaFX 和 Java 之间似乎没有真正的集成。

      还有一些工作试图将 VLC 库 libvlc 导入 java。我还没有尝试过,希望收到任何尝试过的人的回复。

      【讨论】:

      • 感谢这已经一年多了,但如果您仍然感兴趣,请查看我的回答!
      • 谢谢,是的,这对我来说仍然是一个悬而未决的问题,我会调查一下。
      【解决方案5】:

      还没有尝试过 Xuggler(我对此很感兴趣),但我和 VLCJ 玩得很开心。我发现它的缺点是您必须在应用程序之前安装 VLC。

      【讨论】:

      • 您不需要 - 您可以将 libvlc 与您的应用程序一起分发,这就是我所做的。
      • 不要试图获得对 vlcj 的支持,这家伙是个混蛋。
      【解决方案6】:

      我建议使用MPV。您可以很容易地将它与 JavaFX 结合使用,请参阅example

      简而言之,您使用一点 JNA 魔法直接使用 MPV 原生库,然后让视频显示在 JavaFX 舞台上。如果您使用子舞台,您甚至可以将 JavaFX 控件叠加在视频之上(支持完全透明)。

      VLC(带有 VLCJ)可以以类似的方式使用,但我发现 MPV 解决方案的性能更好(查找和启动时间更快)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-10
        • 2012-07-09
        • 2018-05-19
        相关资源
        最近更新 更多