【问题标题】:Output a Java window as a webcam stream将 Java 窗口输出为网络摄像头流
【发布时间】:2012-06-11 22:58:16
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 可以Java Web Start 成为解决方案吗?
  • 我认为 Java Web Start 是用于使用 java 启动应用程序的。我需要编写一个将java窗口输出为网络摄像头流的应用程序,所以我认为这不是一个解决方案,谢谢。无论如何。
  • 如果你想让任何人帮助你,你真的需要澄清你在这里想要做什么......首先,为什么网络摄像头与你的其余问题有任何关系?
  • 刚刚更新了问题以澄清一点,你是对的,不是很清楚。
  • 星际争霸?无论如何,你想要做什么典型的设置脚轮在你有游戏的地方使用并且某些 ui 元素被这个假框架覆盖?如果是这种情况:x-split 不会流式传输屏幕上可见的所有内容吗?

标签: java ffmpeg streaming transparency webcam


【解决方案1】:

我不确切知道您要达到什么目的,但是流式传输您的屏幕的外部程序呢? http://screen-stream.en.softonic.com 之类的东西?

【讨论】:

  • 我正在尝试创建一个将叠加层添加到广播流的程序。因此,我想将动画 .gif 图像作为网络摄像头流式传输。
【解决方案2】:

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

但是,我最大的问题是,您希望如何控制您的游戏?还有,你为什么要这么大的事情来解决容易解决的问题。

如果您只是使用屏幕录制软件将其转换为电影,然后使用 Windows Movie Maker 进行修改以适应您的需求,这将更简单、更同步。 您无需在代码上浪费时间。 =)

我希望这会有所帮助。

【讨论】:

  • 他需要一个直播,所以你的最后一段根本不是一个选择......java.awt.Robot 的想法可能会奏效,尽管你必须自己创建所有的流。
  • 我将使用 xsplit 的 dx10 屏幕截图同时流式传输游戏。所以我正在玩的游戏将被广播到 twitch.tv 帐户。该程序的目的是通过按下热键在游戏输出的顶部实时添加此广播(动画)的叠加层。当前的软件限制无法实现此功能。
【解决方案3】:

您可以制作一个未装饰的JFrameAWTUtilities 类(我认为这是您在Java6u10 中为Window 透明度找到的)并在那里制作所有动画。使用java.awt.Robot.getScreenCapture(Rectangle)x 毫秒捕获一张图像。使用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。

【讨论】:

    猜你喜欢
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 2013-05-14
    • 2014-06-18
    • 1970-01-01
    • 2011-10-31
    相关资源
    最近更新 更多