具有透明背景的 Java VLCJ Canvas 和绘图

标签 java linux windows ffmpeg vlcj

我花了一些时间研究是否可以在 Java 应用程序中绘制 VLCJ 电影。我发现了一些相互矛盾的建议,有些人说这是不可能的,有些引用文章已经转移到 oracle.com 上。

有人可以澄清是否可以绘制 java2d 图形,如矩形/线条,它们也具有透明背景,以便在屏幕上显示形状时可以查看下面的视频流?

如果 vlcj 无法做到这一点,那么对于允许在播放视频流上进行注释的 linux 和 windows 兼容媒体播放器来说,什么是好的替代方案?请注意,我不必局限于 Java,但我可以从为多个平台开发的绘图例程中重新使用的东西将是理想的。

最佳答案

是的,你可以做到。对于普通的硬件渲染视频播放器,您至少需要 Java 6u10(最好是 7),并通过在 VLC Canvas 上覆盖一个透明的 JWindow 来实现这一点(向 Canvas 添加事件以检查更新并不难position/size 然后相应地移动覆盖的窗口。)

另一种不涉及使用覆盖窗口的方法是使用 DirectMediaPlayer,您可以在其中直接访问帧缓冲区(因此可以对像素执行您喜欢的操作,包括包装它们作为 3D 对象周围的纹理等等。)因此,使用这种方法,您可以简单地将您想要的内容绘制到帧缓冲区上,然后再以您选择的方式将其渲染到屏幕上。这是最灵活的方法,但也有缺点,如果您在实现时不够小心,就会失去所有 GPU 加速并最终导致 CPU 瘫痪,尤其是高清视频。

如果一个简单的叠加层就可以解决问题,我会先尝试一下,然后在必要时求助于 DirectMediaPlayer

关于具有透明背景的 Java VLCJ Canvas 和绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14144645/

相关文章:

c# - 关闭 "blah.exe has stopped working"消息。 C#

java - 如何等待使用 Selenium Java 填充 Kendo UI 自动完成

java - Jira 插件已启动,但浏览器中未显示任何内容

java - 出现异常 "submit-job-thread-pool-0"Spark 作业 kafka

linux - 在 Linux 中使用 find 命令尝试匹配文件名时忽略大小写

php - 安装tomcat 8后Nginx 502 Bad Gateway错误

linux - Hash ("#") symbol in/etc/environment 导致字符串被拆分

windows - 英雄联盟 : Username for 'https://git.heroku.com' : git

java - 如何在执行 Object object = new Object() 时注入(inject)依赖项

windows - MSI 错误 - regsvr32 自定义操作失败