3

我想用Java编写一个程序,可以在屏幕上显示动画覆盖。

然后,屏幕将使用名为 x-split 的单独程序在互联网上进行流式传输。

这样做的一个好方法是在 java 中创建一个透明窗口,它将显示动画文件(具有透明度),并且此窗口的输出(其显示)理想情况下应该出现在网络摄像头设备列表中,以便可以轻松地被x-split 这将允许它被安排在我当前正在播放的游戏屏幕上。

这种类型的示例程序是显示网络摄像头图像并将“虚拟眼镜”覆盖在人脸图像上的程序,然后可以将其作为输出凸轮传输。

我找到了 java 6u10-translucent-shapes 库来创建透明窗口,但我不知道如何流式传输它。

我已经阅读了一些建议 JMF 和 FFMpeg 可能是要走的路,但我不确定要安装什么以及如何安装。

任何帮助或指导教程将不胜感激。

4

3 回答 3

2

我不确切知道您要实现的目标,但是流式传输屏幕的外部程序呢?像http://screen-stream.en.softonic.com这样的东西?

于 2012-06-10T05:46:50.460 回答
1

您可以制作一个未装饰JFrameAWTUtilities类(我认为这是您在 Java6u10 中发现的Window透明度)并在那里制作所有动画。用于每x毫秒java.awt.Robot.getScreenCapture(Rectangle)捕获一张图像。用来做计时:javax.swing.Timer

Timer timer = new Timer(x, new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        arrayOfImages[imageCount] = java.awt.Robot.getScreenCapture(r);
        count++;
    }
});

我找到了一个 Java 包装器 - Jffmpeg - 来使用(http://jffmpeg.sourceforge.net/download.html)。您将需要 JMF - http://www.oracle.com/technetwork/java/javase/tech/index-jsp-140239.html - 以及在 Jffmpeg 文档页面中编写的一些其他内容。FMJ ( http://fmj-sf.net/ffmpeg-java/getting_started.php ) 是另一种选择。

FFmpeg需要用Git下载

最后,来自另一个论坛(http://www.blackhatworld.com/blackhat-seo/youtube/330165-command-line-program-convert-image-video.html)的这个帖子向您展示了如何将保存的图像转换为视频. 您可能想完全跳过 Jffmeg 步骤。相反,您可以将所有图像保存到文件中,然后使用 Runtime.getRuntime().exec(String) 将其转换为视频以执行命令行。但是如果你这样做,你将无法使你的程序独立于平台

Java 中的视频有点乏味和烦人,因此您可能希望完全切换到另一种语言,使用更简单的库和 API。

于 2012-06-15T07:24:48.657 回答
1

使用 java.awt 的 Robot 类。它有一个 getScreenCapture(Rectangle) 方法,可用于获取屏幕一部分的 BufferedImages。这些 BufferedImages 可以使用代码进行编辑,然后可以通过全屏应用程序显示来使其闪烁(并消失以重新捕获新图像。)。或者,您可以使用上述方法使用透明的 java 全屏应用程序对其进行过滤,并将其显示在您的小程序上以进行“x-treamed”。

然而,我最大的问题是你希望如何控制你的游戏?另外,你为什么要为了一件容易解决的事情做这么大的事情。

如果您只是使用屏幕录制软件将其变成电影,然后使用 Windows Movie Maker 根据您的需要进行修改,它会更简单、更同步。您无需在代码上浪费时间。=)

我希望这会有所帮助。

于 2012-06-14T07:34:47.157 回答