Danylo Didkovskyi
2022 年 1 月 29 日
远程屏幕共享用于各种应用程序和服务,从网络会议到远程访问应用程序。 后台员工可以使用它来咨询一线同事,或者技术支持专家可以使用它来准确了解客户所看到的内容。
您可以使用 TeamViewer 等第三方应用程序。 但是,如果您需要在 Java 应用程序中拥有远程访问功能怎么办? 在这种情况下,您可能想走另一个方向。
在本文中,我将展示一种方法,让您可以使用 JxBrowser 的功能在不同 PC 上运行的两个 Java 应用程序之间实现屏幕共享。
JxBrowser 是一个跨平台 Java 库,可让您将基于 Chromium 的 Web 浏览器控件集成到 Java Swing、JavaFX、SWT 应用程序中,并使用数百种 Chromium 功能。
为了在 Java 中实现屏幕共享,我将利用 Chromium 支持开箱即用的屏幕共享并且 JxBrowser 提供对其进行编程访问的事实。
该项目由两部分组成:Node.js 上的服务器和两个 Java 应用程序。
该服务器是 WebRTС 服务器的简单实现。 项目的这一部分包含用于连接到服务器并启动屏幕共享会话的 JavaScript 代码。
Java 客户端是两个桌面应用程序。 第一个是带有按钮的窗口。 单击该按钮即可启动共享会话。 第二个应用程序自动接收视频流并显示它。 还有一个按钮可以停止屏幕共享。
WebRTC 服务器配置为两个客户端之间的交互:一个流传输器和一个接收器。 它提供两个静态页面,分别是streamer.html 和receiver.html。
每个 HTML 文件都包含连接到服务器并通过 WebRTC 设置屏幕共享的 JavaScript 代码。 当流媒体开始捕获时,我们会以视频流的形式接收其屏幕视图。 为了展示它,我们在接收端使用内置的 HTML5 视频播放器。
为了检查一切是否正常,让我们打开两个浏览器窗口并亲自查看。
让我们实现 Java 客户端并将它们与 JavaScript 应用程序集成。 我们需要初始化一个空的 Gradle 项目并使用 JxBrowser Gradle 插件添加 JxBrowser 依赖项。
让我们从一个共享屏幕的应用程序开始。
我们需要代表流媒体连接到服务器。 首先,我们需要创建 Engine 和 Browser 实例:
并加载所需的 URL:
加载 URL 后,我们可以访问 Streamer.html 中的 JavaScript 代码,并且可以通过单击按钮直接从 Java 启动屏幕共享:
默认情况下,当网页想要从屏幕捕获视频时,Chromium 会显示一个对话框,我们可以在其中选择捕获源。 通过JxBrowser API,我们可以在代码中选择捕获源:
让我们保存 CaptureSession 的实例,以便稍后可以通过编程方式停止它。
为此,我们需要一个不同的按钮:
在接收器应用程序中,我们将显示共享屏幕。
就像在流媒体应用程序中一样,我们需要连接到 WebRTC 服务器,但这次作为接收器。 因此,创建 Engine 和 Browser 实例,并导航到接收者的 URL:
要在 Java 应用程序中显示流媒体的屏幕,让我们创建 Swing BrowserView 组件并将其嵌入到 JFrame 中:
BrowserView组件将使用HTML5视频播放器显示加载的网页内容,我们将能够看到主播的屏幕。
就是这样!
代码示例根据 Apache License 2.0 提供,并可在 GitHub 上获取。 您可以通过在不同终端中运行以下命令来启动 WebRTC 服务器和两个 Java 应用程序:
查看 JxBrowser 中的更多功能!
该项目的源代码可在 GitHub 上获取。
在本文中,我向您展示了如何在一个 Java 应用程序中共享屏幕并使用 JxBrowser 在另一个应用程序中显示该屏幕。
我创建了一个可以共享屏幕的简单 JavaScript 应用程序。 然后我使用 JxBrowser 将其集成到两个 Swing 应用程序中。
通过 JxBrowser 提供的捕获 API,我立即丰富了标准 Java 应用程序的屏幕共享功能。