当前位置: 首页 > 面试题库 >

Java Applet屏幕捕获到视频

咸玄天
2023-03-14
问题内容

我想找出一个如何使用Java捕获截屏视频。我知道使用Robot类可以获取屏幕截图,但是如何将其捕获为视频并将其上传到服务器呢?那将如何工作?

想法?


问题答案:

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

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

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

通过jffmpeg之类的抽象层使用通用视频编解码器可能会同时实现更好的性能和更好的压缩率,但是我怀疑主流视频编解码器(例如WMV或H.264)是否适合通用桌面内容。

如果您真的需要一个纯Java解决方案(并且不能使用任何可用的独立软件,这些软件都可以满足您的要求),那么我将尝试实现自己的简单压缩算法。在常见的桌面活动下,大多数连续屏幕快照之间的差异应该很小,因此可能会比较有效的方法是完全传输第一帧,然后实施一种算法来大致检测矩形,在矩形中进行更改然后仅传输与JPG结合使用,最好传输(质量)PNG压缩结合的图片。



 类似资料:
  • 问题内容: 我们正在考虑用Java编写一种软件,该软件可以在运行期间记录监控什么内容。您对如何有效捕获监视器输出有任何建议吗? 占用的CPU越少,我们捕获屏幕的频率就越高,并且在不干扰其他正在运行的应用程序的情况下,生成的视频越流畅。 如果复制屏幕捕获部分不太困难,则Java中的现有开放源代码程序将起作用。我希望它不需要调用另一种编程语言。我们会看到。 问题答案: 我不确定是否需要框架。 请查阅该

  • 我试图根据用户输入的坐标捕捉区域截图。基本上,用户在屏幕上点击得到x,y坐标,然后在其他地方点击另一对x,y坐标,然后将其放入一个矩形中,并使用机器人库创建屏幕截图。 我有的问题是,我得到了随机截图,这不是用户输入的坐标,我怎么能考虑包括0的坐标,因为矩形值必须超过1。 以下是我迄今为止的代码:

  • 我正在使用Python 2.7和OpenCV 2.4。9 我需要捕获显示给用户的当前帧,并将其加载为Python中的cv::Mat对象。 你们知道一种快速递归的方法吗? 我需要像下面的例子中所做的那样,从网络摄像头递归地捕获Mat帧: 在本例中,它使用了VideoCapture类来处理从网络摄像头捕获的图像。 用视频捕捉。read()新帧总是被读取并存储到Mat对象中。 我可以将“打印屏幕流”加载

  • 我试图用selenium和Firefox捕获http://www.flipkart.com url的屏幕。 它拍摄整个页面的屏幕快照,但它显示的内页图像对许多其他图像不可用。我无法纠正它。帮帮我.

  • 我正试图用java设计一个程序,定期(每100毫秒左右)拍摄我的屏幕截图,并计算整个屏幕的平均像素rgb值。我需要这个来处理视频游戏和iTunes/Quicktime视频。然而,我曾尝试使用JNA和robot来捕获屏幕,它只在我没有捕获全屏或iTunes视频的视频游戏时起作用。例如,我通过保存一个图像来测试代码,以检查并查看发生了什么。当我玩电子游戏时,我只看到一个空白窗口的截图。我认为这是因为游

  • 问题内容: 如何使用快照数据捕获android设备屏幕内容并制作图像文件?我应该使用哪个API或在哪里可以找到相关资源? 顺便说一句:不是相机快照,而是设备屏幕 问题答案: 根据此链接 ,可以在android sdk的tools目录中使用ddms进行屏幕截图。 要在应用程序内(而不是在开发过程中)执行此操作,也有一些应用程序可以这样做。但是正如@ zed_0xff指出的那样,它肯定需要root用户