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