在 JavaFX 客户端中播放 h265 HEVC

2023-12-21

我有一个小型 JavaFX 应用程序可以在 Windows / Linux 客户端上播放一些 GoPro 视频。过去我使用的是GoPro 4。我将视频下载到客户端并从本地存储播放。像这样:

    File file = new File("AnyVideo.MP4");
    Media m = new Media(file.toURI().toString());
    MediaPlayer mp = new MediaPlayer(m);
    mp.setAutoPlay(true);
    mediaView.setMediaPlayer(mp);

我现在会尝试切换到新的 GoPro 6。但它并没有按预期工作。

问题可能是 JavaFX MediaPlayer 不支持新 GoPro 6 的编解码器。

  • GoPro 4:h264 AVC 视频编解码器
  • GoPro 6:h265 HEVC 视频编解码器

JavaFX 媒体播放器仅支持 h264 编解码器 https://docs.oracle.com/javafx/2/api/javafx/scene/media/package-summary.html.

有谁知道如何使用 JavaFX 应用程序播放 h265 HEVC 视频。在最好的情况下,解决方案可以立即从摄像机播放视频,而无需先将视频下载到客户端。 GoPro 有一个小型媒体服务器来通过 HTTP 获取视频。例如:http://10.5.5.9:8080/videos/DCIM/100/GPR10973.MP4 http://10.5.5.9:8080/videos/DCIM/100/GPR10973.MP4


原生 JavaFX 解决方案

也许这是重复的或至少与以下内容相关:

  • 向 JavaFX 2.2 添加其他视频编解码器/DVD 支持 https://stackoverflow.com/questions/8153227/adding-other-video-codecs-dvd-support-to-javafx-2-2/48512027#48512027.

请参阅我对该问题的回答,获取 JavaFX bug 跟踪系统中相关功能请求的链接。

使用 JavaFX 的非 JavaFX 技术的解决方案

除了该问题的答案中讨论的解决方案之外,还有其他可能适合您的解决方案。特别是如果您主要关心的只是获得某种播放效果,即使它没有与 JavaFX 媒体系统深度集成。

例如,本机 JavaFX 播放之外的其他方法可能是:

  1. Using VLCJ https://github.com/caprica/vlcj与某种 Swing 集成(例如 SwingNode,尽管这可能有效也可能无效)。
  2. Rendering the VLCJ video into a JavaFX ImageView or Canvas.
    • 参见相关:使用 vlc api 在 Javafx 中播放视频 https://stackoverflow.com/questions/32476109/playing-video-in-java-fx-using-vlcj-api.
    • 其中链接到以下项目:https://github.com/caprica/vlcj-javafx https://github.com/caprica/vlcj-javafx.
  3. Launch a native video player if you don't need the video embedded.
    • Perhaps 桌面.open() https://docs.oracle.com/javase/9/docs/api/java/awt/Desktop.html#open-java.io.File- or the 流程API https://docs.oracle.com/javase/9/docs/api/java/lang/Process.html#toHandle--可以做到这一点。
  4. Call ffmpeg https://stackoverflow.com/questions/1281353/use-java-ffmpeg-wrapper-or-simply-use-java-runtime-to-execute-ffmpeg to convert h265 to h264.
    • 我对此了解不多,但快速搜索该主题会显示对 xuggle 项目的引用。
    • Current status of the xuggler project http://www.xuggle.com/xuggler/status is:

      Xuggler 处于中断状态,因为没有人再积极开发它。对不起。也就是说,您始终可以找到源代码并开始自己进行黑客攻击。祝你好运!

    • 所以我祝你好运;-)
  5. 通过启动本机浏览器HostServices.showDocument() https://docs.oracle.com/javase/9/docs/api/javafx/application/HostServices.html#showDocument-java.lang.String-调用以显示视频。
  6. Use a third party browsing component that can be integrated into JavaFX and includes support for the media type you want to play back, for example JxBrowser:
    • jxbrowser 中的 H.265 支持 https://stackoverflow.com/questions/44548089/h-265-support-in-jxbrowser

在上述选项中,就个人而言,我建议使用 HostServices 在本机浏览器中播放视频(如果这种解决方案可能适合您)。

详细介绍各种选项可能超出了 StackOverflow 的范围(即使上面的列表开始看起来有时也会对库推荐感到皱眉)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JavaFX 客户端中播放 h265 HEVC 的相关文章

  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] 问题

    我正在使用 java 客户端通过 Kerberos 身份验证安全访问 HDFS 我尝试打字klist在服务器上 它显示已经存在的有效票证 我收到的异常是客户端无法通过以下方式进行身份验证 TOKEN KERBEROS 帮助将不胜感激 这是一
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐