使用纯Java解决方案,我怀疑它是否会起作用,但这当然取决于您对“视频”的解释。
在分辨率为1920x1200的台式机上,使用Java Robot捕获整个屏幕时,每秒可以获取约20帧。由于每个图像都包含> 6
MB的未压缩数据,因此我需要超过1
Gbps的带宽才能将这些图像的原始数据传输到服务器。很可能,要求这么大的带宽是不可接受的,因此您要么必须减少每秒的帧数,要么对图像进行某种压缩。
一种可能性是使用ImageIO支持的一种图像格式压缩每个图像。压缩图像的大小当然将在很大程度上取决于屏幕上实际显示的内容,但是压缩器的性能并不是特别好。压缩为PNG应该为大多数桌面内容提供最佳的无损压缩率,但是至少我的计算机每秒只能处理大约2帧。使用默认质量设置的JPEG压缩器可达到约5帧/秒。
通过jffmpeg之类的抽象层使用通用视频编解码器可能会同时实现更好的性能和更好的压缩率,但是我怀疑主流视频编解码器(例如WMV或H.264)是否适合通用桌面内容。
如果您真的需要一个纯Java解决方案(并且不能使用任何可用的独立软件,这些软件都可以满足您的要求),那么我将尝试实现自己的简单压缩算法。在常见的桌面活动下,大多数连续屏幕快照之间的差异应该很小,因此可能会比较有效的方法是完全传输第一帧,然后实施一种算法来大致检测矩形,在矩形中进行更改然后仅传输与JPG结合使用,最好传输(质量)PNG压缩结合的图片。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)