【发布时间】:2011-01-04 18:48:04
【问题描述】:
我想了解如何使用 java 捕获截屏视频。我知道使用 Robot class one 可以获得屏幕截图,但我该如何将其捕获为视频,然后将其上传到服务器?这究竟是如何工作的?
想法?
【问题讨论】:
-
大卫,我可以问一下我是否可以查看您的截屏应用程序的源代码以用于学习目的?谢谢
标签: java
我想了解如何使用 java 捕获截屏视频。我知道使用 Robot class one 可以获得屏幕截图,但我该如何将其捕获为视频,然后将其上传到服务器?这究竟是如何工作的?
想法?
【问题讨论】:
标签: java
对于纯 Java 解决方案,我怀疑它是否会起作用,但这当然取决于您对“视频”的解释。
在分辨率为 1920x1200 的桌面上,使用 Java Robot 捕获整个屏幕时,我可以获得大约 20 帧每秒。由于每个图像都包含 >6 MB 的未压缩数据,因此我需要超过 1 Gbps 的带宽才能将这些图像的原始数据传输到服务器。最有可能的是,要求如此多的带宽是不可接受的,因此您要么必须减少每秒的帧数,要么对图像应用某种压缩。
一种可能性是使用 ImageIO 支持的图像格式之一压缩每个图像。压缩图像的大小当然很大程度上取决于屏幕上实际显示的内容,但压缩器的性能并不是特别好。压缩为 PNG 应该可以为大多数桌面内容提供最佳的无损压缩率,但至少我的计算机每秒只能处理大约 2 帧。使用具有默认质量设置的 JPEG 压缩器可以达到大约每秒 5 帧。
通过jffmpeg 这样的抽象层使用普通视频编解码器可能会同时获得更好的性能和更好的压缩比,但我怀疑 WMV 或 H.264 等主流视频编解码器是否适合普通桌面内容。
如果您确实需要纯 Java 解决方案(并且无法使用任何可用的独立软件,这些软件可以满足您的要求),我会尝试实现自己的简单压缩算法。对于常见的桌面活动,大多数连续屏幕截图之间应该几乎没有差异,所以可能会很好地传输第一帧,然后实现一个算法来粗略检测矩形,其中已经进行了更改,然后仅传输这些与 JPG 或最好(质量)PNG 压缩相结合的文件。
【讨论】:
或者使用 Xuggler,一个更好的 Java FFmpeg 包装器。其实截屏和编码视频的代码就是standard tutorials之一。
【讨论】:
我也很好奇这个。 https://www.screencast.com/ 目前正在使用纯 Java(或至少直接从浏览器中提取)体验来做这件事。
【讨论】:
您可以将 Java 之类的东西用于原生 FFMPEG 构建,并在运行时执行命令行。这是我制作的一个小程序:http://have2chat.net/screencast/
【讨论】:
我已经下载了Screencast-O-Matic.com 的主要捕获*.JAR 文件。下载文件:
【讨论】: