在 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 的相关文章

  • (更好的方法)使用 Eclipse 和 XText 获取项目中的文件

    我正在编写一个 XText 编辑器 并进行一些语义突出显示 我正在解析的部分语言引用了文件 这些文件应该存在于项目中 我想根据这些文件是否位于正确的位置来突出显示 目前 我有一个非常丑陋的解决方案 但我确信有更好的方法 public voi
  • 从SQLite列中获取所有数字字符串并进行总和计算

    我是 Android 和 SQLite 的新手 我在 SQLite 中有一个只有数字的 AMOUNT 列 我可以在 ListView 中显示它 但我无法找到任何我理解的方法来将它们全部添加并显示在 TextView 中 这是数据库助手 im
  • Mediaplayer 播放几次后停止播放

    我有一个按钮 按下它会播放一个随机声音剪辑 然后播放另一个声音剪辑 然后通过一个媒体播放器播放另一个声音剪辑 但是多次按下该按钮 15 20 次 后 所有音频都会停止 我在播放最后一个音频剪辑后释放媒体播放器 所以我不认为这是原因 有什么指
  • 我从 String placeName = placeText.getText().toString(); 收到空指针异常

    您好 想从编辑文本中获取地名并在地图上标记 这是我的代码 其中出现空指针异常 请帮助我应该做什么以及哪里出错了 因为我从对话框中的编辑文本字段获取地名 View layout View inflate this R layout alert
  • Mockito mockStatic 无法解析符号

    我正在使用 Spring Boot 并在单元测试中 我试图模拟Files delete myFile toPath method 为此 我尝试使用Mockito mockStatic 方法 但是当我尝试使用它时 我的 IDE Intelli
  • Map:为 Integer 和 Double 类型定义方法,但不为 String 类型定义方法

    我正在尝试定义一个方法putIfGreaterThan 为了我的新Map class 给定一个键 仅当新值大于旧值时 它才会用新值替换旧值 我知道我可以通过组合来实现这一点 通过有一个private final Map
  • Java:从 ScriptEngine javascript 返回一个对象

    我正在尝试使用 Java 来评估 javascript脚本引擎 https docs oracle com javase 7 docs api javax script ScriptEngine html班级 这是我正在尝试做的事情的一个简
  • SwingUtilities.invokeLater

    我的问题与SwingUtilities invokeLater 我应该什么时候使用它 每次需要更新 GUI 组件时都必须使用吗 它到底有什么作用 是否有替代方案 因为它听起来不直观并且添加了看似不必要的代码 Do I have to use
  • Netty Nio java 中的通信

    我想在 Netty nio 中创建一个具有两个客户端和一个服务器的通信系统 更具体地说 首先 我希望当两个客户端与服务器连接时从服务器发送消息 然后能够在两个客户端之间交换数据 我正在使用本示例提供的代码 https github com
  • 如何根据从 jtextfield 和组合框接收的值将数据行添加到 Jtable

    我有一个JFrame表格有JTextFields JCombobox等等 我能够将这些值接收到变量 现在我想将接收到的数据添加到JTable当用户单击 添加 或类似的操作时在新行中 我创造了JTable使用 net beans 的问题是将这
  • 从侦听器中修改 JFrame [重复]

    这个问题在这里已经有答案了 可能的重复 如何在框架可见后调用 setUndecorated https stackoverflow com questions 875132 how to call setundecorated after
  • Java/Hibernate - 异常:内部连接池已达到其最大大小,当前没有可用的连接

    我第一次在大学项目中使用 Hibernate 而且我还是个新手 我想我遵循了我的教授和我阅读的一些教程给出的所有指示 但我不断收到标题中的异常 Exception in thread main org hibernate Hibernate
  • Unix 纪元时间转 Java Date 对象

    我有一个包含以下内容的字符串UNIX 纪元时间 https en wikipedia org wiki Unix time 我需要将其转换为 Java Date 对象 String date 1081157732 DateFormat df
  • 在进行堆转储后,如何在发生 OutOfMemoryError 时重新启动 JVM?

    我知道关于 XX HeapDumpOnOutOfMemoryError https stackoverflow com q 542979 260805JVM 参数 我也知道 XX OnOutOfMemoryError cmd args cm
  • 可空日期列合并问题

    我在 Geronimo 应用程序服务器上使用 JPA 和下面的 openjpa 实现 我也在使用MySQL数据库 我在更新具有可为空 Date 属性的对象时遇到问题 当我尝试合并 Date 属性设置为 null 的实体时 不会生成 sql
  • Java环境变量设置方法

    我已将以下行插入 bash profile export GOOGLE APPLICATION CREDENTIALS Users jun Downloads export PATH PATH GOOGLE APPLICATION CRED
  • 如果 @transactional 在类级别应用,如何拦截 @transactional 参数

    我想捕获 transactional 的参数 如果它应用于类级别 例如如果 transactional应用在方法级别 例如 class A transactional readOnly true public void someMethod
  • 在 Spark MLlib 上使用 Java 中的 Breeze

    在尝试从Java使用MLlib时 使用微风矩阵运算的正确方法是什么 例如scala 中的乘法很简单 matrix vector 相应的功能在Java中是如何表达的 有一些方法 例如 colon times 可以通过正确的方式调用 breez
  • Selenium Webdriver - 单击多个下拉菜单时出现陈旧元素异常,而 HTML DOM 不会更改

    我尝试自动化一个场景 其中条件是我必须从下拉列表中选择一个选项 然后它旁边有另一个下拉列表 我必须单击下一个下拉列表中的一个选项才能启用按钮 我尝试使用代码 但它仅单击第一个选项 并显示错误为过时的元素引用 元素未附加到页面文档 请帮忙 如
  • RetentionPolicy CLASS 与 RUNTIME

    两者之间有什么实际区别RetentionPolicy CLASS and RetentionPolicy RUNTIME 看起来两者都被记录到字节码中 并且无论如何都可以在运行时访问 无论如何 两者都可以在运行时访问 那不是那个javado

随机推荐