我想知道如何使用java捕获截屏视频。我知道使用Robot类可以获得屏幕截图,但我如何将其捕获为视频,然后将其上传到服务器?这到底是如何工作的呢?
想法?
发布于 2010-01-14 03:35:24
使用纯Java解决方案,我怀疑它是否有效,但这当然取决于您对“视频”的解释。
在我的1920x1200分辨率的桌面上,当我使用Java Robot捕捉整个屏幕时,我能够获得大约20帧/秒。由于每个图像包含大于6Gbps的未压缩数据,因此我需要超过1Gbps的带宽才能将这些图像的原始数据传输到服务器。最有可能的是,需要如此多的带宽是不可接受的,因此您要么必须减少每秒的帧数,要么对图像应用某种压缩。
一种可能性是使用ImageIO支持的一种图像格式压缩每个图像。压缩图像的大小当然很大程度上取决于屏幕上实际显示的内容,但压缩器的性能并不是特别好。压缩成PNG应该可以为大多数桌面内容提供最好的无损压缩比,但至少我的计算机每秒只能处理大约2帧。使用默认质量设置的JPEG压缩器可达到每秒约5帧。
通过像jffmpeg这样的抽象层使用通用视频编解码器可能会获得更好的性能和更好的压缩比,但我怀疑主流视频编解码器是否适合常见的桌面内容。
如果您确实需要一个纯Java解决方案(并且不能使用任何可用的独立软件,这些软件可以完成您所要求的工作),那么我可以尝试实现我自己的简单压缩算法。对于普通的桌面活动,大多数连续的屏幕截图之间应该有很小的差异,所以可能很好的做法是完整地传输第一帧,然后实现一个算法来粗略地检测矩形,其中已经进行了更改,然后只传输结合JPG或(质量) PNG压缩的矩形。
发布于 2010-01-26 11:59:39
或者使用Xuggler,它是Java语言中更好的FFmpeg包装器。实际上,用于捕获屏幕和编码视频的代码是standard tutorials之一。
发布于 2010-03-12 20:39:43
我对此也很好奇。https://www.screencast.com/目前正以一种纯java (或至少直接脱离浏览器)的体验来做到这一点。
https://stackoverflow.com/questions/2059309
复制相似问题