【问题标题】:Java applet screen capture to a videoJava小程序屏幕截图到视频
【发布时间】:2011-01-04 18:48:04
【问题描述】:

我想了解如何使用 java 捕获截屏视频。我知道使用 Robot class one 可以获得屏幕截图,但我该如何将其捕获为视频,然后将其上传到服务器?这究竟是如何工作的?

想法?

【问题讨论】:

  • 大卫,我可以问一下我是否可以查看您的截屏应用程序的源代码以用于学习目的?谢谢

标签: java


【解决方案1】:

对于纯 Java 解决方案,我怀疑它是否会起作用,但这当然取决于您对“视频”的解释。

在分辨率为 1920x1200 的桌面上,使用 Java Robot 捕获整个屏幕时,我可以获得大约 20 帧每秒。由于每个图像都包含 >6 MB 的未压缩数据,因此我需要超过 1 Gbps 的带宽才能将这些图像的原始数据传输到服务器。最有可能的是,要求如此多的带宽是不可接受的,因此您要么必须减少每秒的帧数,要么对图像应用某种压缩。

一种可能性是使用 ImageIO 支持的图像格式之一压缩每个图像。压缩图像的大小当然很大程度上取决于屏幕上实际显示的内容,但压缩器的性能并不是特别好。压缩为 PNG 应该可以为大多数桌面内容提供最佳的无损压缩率,但至少我的计算机每秒只能处理大约 2 帧。使用具有默认质量设置的 JPEG 压缩器可以达到大约每秒 5 帧。

通过jffmpeg 这样的抽象层使用普通视频编解码器可能会同时获得更好的性能和更好的压缩比,但我怀疑 WMV 或 H.264 等主流视频编解码器是否适合普通桌面内容。

如果您确实需要纯 Java 解决方案(并且无法使用任何可用的独立软件,这些软件可以满足您的要求),我会尝试实现自己的简单压缩算法。对于常见的桌面活动,大多数连续屏幕截图之间应该几乎没有差异,所以可能会很好地传输第一帧,然后实现一个算法来粗略检测矩形,其中已经进行了更改,然后仅传输这些与 JPG 或最好(质量)PNG 压缩相结合的文件。

【讨论】:

  • screencast-o-matic.com 是如何以如此出色的帧速率做到这一点的?我理解并同意你的观点,需要一个非常好的压缩算法。
  • 我怎么知道?首先,它们只捕获屏幕的一小部分(640x480?),而小程序的一部分是用本机代码实现的。如果您真的想知道,也许您设法通过反编译的小程序代码进行调试。
  • SOM 的核心是一个独立的 Java 应用程序,而不是一个小程序。看起来它使用 ffMPEG 的编译版本进行压缩/编辑,但所有文件都存储在本地,直到通过应用上传完成的截屏视频。
【解决方案2】:

或者使用 Xuggler,一个更好的 Java FFmpeg 包装器。其实截屏和编码视频的代码就是standard tutorials之一。

【讨论】:

  • Xuggler 不允许我将 lib 作为 applet 运行。 (或者我错过了什么?)
  • 没错;今天它不支持小程序,但它在我们未来的路线图中。
【解决方案3】:

我也很好奇这个。 https://www.screencast.com/ 目前正在使用纯 Java(或至少直接从浏览器中提取)体验来做这件事。

【讨论】:

    【解决方案4】:

    您可以将 Java 之类的东西用于原生 FFMPEG 构建,并在运行时执行命令行。这是我制作的一个小程序:http://have2chat.net/screencast/

    【讨论】:

    • 如果可以的话,为了学习,可以分享一下源码吗?如果您能展示如何从小程序访问网络摄像头,那就太好了
    【解决方案5】:

    我已经下载了Screencast-O-Matic.com 的主要捕获*.JAR 文件。下载文件:

    1. 转到http://screencast-o-matic.com/jars/ScreencastOMaticRun-1.0.5.jar
    2. 保存文件
    3. 提取内容(我打算将其用于商业用途!)

    【讨论】:

      猜你喜欢
      • 2010-10-19
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      相关资源
      最近更新 更多