最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解如何在Java中實(shí)現(xiàn)屏幕共享

 更新時(shí)間:2024年10月31日 08:25:01   作者:TeamDev  
在本文中,將為大家展示如何利用 JxBrowser 的功能,實(shí)現(xiàn)運(yùn)行在不同電腦上的兩個(gè) Java 應(yīng)用程序之間的屏幕共享,感興趣的小伙伴可以參考一下

遠(yuǎn)程屏幕共享廣泛運(yùn)用于各種應(yīng)用和服務(wù)中,從網(wǎng)絡(luò)會(huì)議到遠(yuǎn)程訪問(wèn)應(yīng)用都離不開(kāi)它的支持。后臺(tái)員工可以使用它向一線同事咨詢問(wèn)題,技術(shù)支持專家也可以通過(guò)它查看客戶看到的精確畫(huà)面。

盡管市面上有像 TeamViewer 這樣的第三方應(yīng)用可供選擇,但如果您希望直接在 Java 應(yīng)用程序中集成遠(yuǎn)程訪問(wèn)功能,那么,您可能需要考慮另一種解決方案。

在本文中,我將向您展示如何利用 JxBrowser 的功能,實(shí)現(xiàn)運(yùn)行在不同電腦上的兩個(gè) Java 應(yīng)用程序之間的屏幕共享。

JxBrowser 作為一款強(qiáng)大的跨平臺(tái) Java 庫(kù),它不僅能夠?qū)⒒?Chromium 的 Web 瀏覽器控件無(wú)縫集成到您的 Java Swing、JavaFX、SWT 應(yīng)用程序中,同時(shí)還提供了對(duì) Chromium 數(shù)百種強(qiáng)大功能的支持,這為我們實(shí)現(xiàn)屏幕共享提供了很大便利。

為了在 Java 中實(shí)現(xiàn)屏幕共享,我將利用 Chromium 內(nèi)置的屏幕共享功能,并結(jié)合 JxBrowser 提供的編程接口進(jìn)行操作。

概述

該項(xiàng)目包含兩部分: 一是基于 Node.js 的服務(wù)器;二是兩個(gè)獨(dú)立的 Java 應(yīng)用程序。

服務(wù)器是一個(gè)簡(jiǎn)化的 WebRTC 服務(wù)器實(shí)現(xiàn)。項(xiàng)目的這一部分包含了用于連接到服務(wù)器并啟動(dòng)屏幕共享會(huì)話的 JavaScript 代碼。

Java 客戶端是兩個(gè)桌面應(yīng)用程序。第一個(gè)應(yīng)用程序是一個(gè)帶有按鈕的窗口。點(diǎn)擊按鈕將啟動(dòng)共享會(huì)話。第二個(gè)應(yīng)用程序則會(huì)自動(dòng)接收視頻流并顯示它。同時(shí)還有一個(gè)按鈕用于停止屏幕共享。

WebRTC 服務(wù)器

WebRTC 服務(wù)器被配置為支持兩個(gè)客戶端之間的交互:一個(gè)流媒體發(fā)送端(streamer)和一個(gè)接收端(receiver)。該服務(wù)器提供兩個(gè)靜態(tài)頁(yè)面,分別是 streamer.html 和 receiver.html。

const app = express();

app.use(express.static('public'));

app.get('/streamer', (req, res) => {
   res.sendFile(rootPath + 'public/streamer.html');
});

app.get('/receiver', (req, res) => {
   res.sendFile(rootPath + 'public/receiver.html');
});

每個(gè) HTML 文件都包含了 JavaScript 代碼,這段代碼負(fù)責(zé)連接至服務(wù)器并通過(guò) WebRTC 建立屏幕共享。當(dāng)流媒體發(fā)送端開(kāi)始捕獲屏幕時(shí),我們會(huì)將其屏幕視圖作為視頻流接收。為了顯示這個(gè)視頻流,我們會(huì)在接收端使用內(nèi)置的 HTML5 視頻播放器。

為了檢查一切是否正常,讓我們打開(kāi)兩個(gè)瀏覽器窗口親自查看一下。

Java 客戶端

接下來(lái),讓我們實(shí)現(xiàn) Java 客戶端,并將它們與 JavaScript 應(yīng)用程序集成。我們需要初始化一個(gè)空的 Gradle 項(xiàng)目,并使用 JxBrowser Gradle 插件添加 JxBrowser 的依賴項(xiàng)。

plugins {
    …
    id("com.teamdev.jxbrowser") version "1.0.1"
}

jxbrowser {
    version = "{version}"
}

dependencies {
    // 檢測(cè)當(dāng)前平臺(tái)并添加相應(yīng)的 Chromium 二進(jìn)制文件。 
    implementation(jxbrowser.currentPlatform)

    // 添加對(duì) Swing 集成的依賴項(xiàng)。
    implementation(jxbrowser.swing)
}

流媒體發(fā)送端應(yīng)用

讓我們從一個(gè)將要共享其屏幕的應(yīng)用程序開(kāi)始。

我們需要代表流媒體發(fā)送端連接到服務(wù)器。首先,需要?jiǎng)?chuàng)建 Engine 和 Browser 的實(shí)例:

Engine engine = Engine.newInstance(HARDWARE_ACCELERATED);
Browser browser = engine.newBrowser();

然后加載所需的 URL:

browser.navigation().loadUrlAndWait("http://localhost:3000/streamer");

一旦 URL 加載完畢,我們便可以訪問(wèn) streamer.html 中的 JavaScript 代碼,以及可以在 Java 中通過(guò)按鈕點(diǎn)擊直接開(kāi)始屏幕共享:

JButton startSharingButton = new JButton("共享您的屏幕");

startSharingButton.addActionListener(e -> {
   browser.mainFrame().ifPresent(mainFrame ->    
       mainFrame.executeJavaScript("startScreenSharing()"));
});

默認(rèn)情況下,當(dāng)網(wǎng)頁(yè)想要捕獲屏幕上的視頻時(shí),Chromium 會(huì)彈出一個(gè)對(duì)話框供用戶選擇捕獲源。不過(guò),借助 JxBrowser API,我們可以直接在代碼中指定捕獲源,從而省去手動(dòng)選擇的步驟:

browser.set(StartCaptureSessionCallback.class, (params, tell) -> {
    CaptureSources sources = params.sources();
    // 共享整個(gè)屏幕。
    CaptureSource screen = sources.screens().get(0);
    tell.selectSource(screen, AudioCaptureMode.CAPTURE);
});

讓我們保存 CaptureSession 的實(shí)例,以便稍后可以通過(guò)編程方式停止它。

private CaptureSession captureSession;
…
browser.on(CaptureSessionStarted.class, event -> 
    captureSession = event.capture()
);

為此,我們需要一個(gè)不同的按鈕:

JButton stopSharingButton = new JButton("停止共享");
stopSharingButton.addActionListener(e -> {
   captureSession.stop();
});

接收端應(yīng)用

在接收端應(yīng)用中,我們將顯示共享的屏幕。

和流媒體發(fā)送端應(yīng)用一樣,我們需要連接到 WebRTC 服務(wù)器,但這次是作為接收端。因此,我們需要?jiǎng)?chuàng)建 Engine 和 Browser 實(shí)例,并導(dǎo)航到接收端的 URL:

Engine engine = Engine.newInstance(HARDWARE_ACCELERATED);
Browser browser = engine.newBrowser();
browser.navigation().loadUrlAndWait("http://localhost:3000/receiver");

為了在 Java 應(yīng)用程序中顯示流媒體發(fā)送端的屏幕,讓我們創(chuàng)建一個(gè) Swing 的 BrowserView 組件,并將其嵌入到 JFrame 中:

private static void initUI(Browser browser) {
   BrowserView view = BrowserView.newInstance(browser);

   JFrame frame = new JFrame("接收端");
   frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
   frame.setSize(700, 500);
   frame.add(view, BorderLayout.CENTER);
   frame.setLocationRelativeTo(null);
   frame.setVisible(true);
}

BrowserView 組件將顯示加載的網(wǎng)頁(yè)內(nèi)容,包括 HTML5 視頻播放器,這樣我們就可以看到流媒體發(fā)送端的屏幕了。

就是這樣!

代碼示例在 Apache License 2.0 許可下提供,并可在 GitHub 上獲取。您可以在不同的終端中運(yùn)行以下命令來(lái)啟動(dòng) WebRTC 服務(wù)器和兩個(gè) Java 應(yīng)用程序:

cd server && node server.js
cd clients && ./gradlew runStreamer
cd clients && ./gradlew runReceiver

源代碼

該項(xiàng)目的源代碼可在 GitHub 上獲取。

結(jié)論

在本文中,我向您展示了如何利用 JxBrowser 在一個(gè) Java 應(yīng)用程序中實(shí)現(xiàn)屏幕共享,并在另一個(gè) Java 應(yīng)用程序中顯示它。

我創(chuàng)建了一個(gè)簡(jiǎn)單的 JavaScript 屏幕共享應(yīng)用。然后使用 JxBrowser 將其集成到了兩個(gè) Swing 應(yīng)用程序中。

借助 JxBrowser 提供的捕獲 API,我很快就為標(biāo)準(zhǔn)的 Java 應(yīng)用程序增加了屏幕共享功能。

到此這篇關(guān)于詳解如何在Java中實(shí)現(xiàn)屏幕共享的文章就介紹到這了,更多相關(guān)Java屏幕共享內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java編寫(xiě)網(wǎng)上超市購(gòu)物結(jié)算功能程序

    Java編寫(xiě)網(wǎng)上超市購(gòu)物結(jié)算功能程序

    這篇文章主要為大家詳細(xì)介紹了Java編寫(xiě)網(wǎng)上超市購(gòu)物結(jié)算功能程序的具體代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java Lambda表達(dá)式和函數(shù)式接口實(shí)例分析

    Java Lambda表達(dá)式和函數(shù)式接口實(shí)例分析

    這篇文章主要介紹了Java Lambda表達(dá)式和函數(shù)式接口,結(jié)合實(shí)例形式分析了Java8 Lambda表達(dá)式和函數(shù)式接口相關(guān)原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • SpringBoot配置actuator的代碼

    SpringBoot配置actuator的代碼

    這篇文章主要介紹了SpringBoot配置actuator,這里大家需要注意可以監(jiān)控SpringBoot?中的?Tomcat?性能數(shù)據(jù),?以日志形式定期輸出監(jiān)控?cái)?shù)據(jù),?只需要配置一個(gè)Bean,需要的朋友可以參考下
    2022-03-03
  • java郵件亂碼的徹底解決方案

    java郵件亂碼的徹底解決方案

    在本篇文章里小編給大家整理的是關(guān)于java郵件亂碼的徹底解決方案,需要的朋友們可以學(xué)習(xí)下。
    2019-12-12
  • Java實(shí)現(xiàn)生成二維碼展示到瀏覽器的示例代碼

    Java實(shí)現(xiàn)生成二維碼展示到瀏覽器的示例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)生成二維碼展示到瀏覽器的示例代碼,要實(shí)現(xiàn)在瀏覽器展示二維碼,那么首先需要html文件,通過(guò)Java生成二維碼的工具類,在controller層調(diào)用接口,就可以實(shí)現(xiàn)在瀏覽器上展示二維碼,需要的朋友可以參考下
    2024-01-01
  • 一文搞懂MyBatis一級(jí)緩存和二級(jí)緩存

    一文搞懂MyBatis一級(jí)緩存和二級(jí)緩存

    本文主要介紹了一文搞懂MyBatis一級(jí)緩存和二級(jí)緩存,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • SpringBoot之webflux全面解析

    SpringBoot之webflux全面解析

    這篇文章主要介紹了SpringBoot之webflux全面解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • maven 指定version不生效的問(wèn)題

    maven 指定version不生效的問(wèn)題

    這篇文章主要介紹了maven 指定version不生效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java性能的十一個(gè)用法分享

    Java性能的十一個(gè)用法分享

    這篇文章主要介紹了Java性能的十一個(gè)用法,需要的朋友可以參考下
    2014-10-10
  • Java從源碼看異步任務(wù)計(jì)算FutureTask

    Java從源碼看異步任務(wù)計(jì)算FutureTask

    這篇文章主要介紹了Java從源碼看異步任務(wù)計(jì)算FutureTask,F(xiàn)utureTask就能夠很好的幫助我們實(shí)現(xiàn)異步計(jì)算,并且可以實(shí)現(xiàn)同步獲取異步任務(wù)的計(jì)算結(jié)果,具體是怎樣實(shí)現(xiàn)的,下面我們就一起來(lái)學(xué)習(xí)下面文章的具體內(nèi)容吧
    2022-04-04

最新評(píng)論

彩票| 沂源县| 尼木县| 磐安县| 乡城县| 莫力| 双江| 玛曲县| 灯塔市| 抚松县| 上饶市| 榕江县| 洛扎县| 丁青县| 陆川县| 洞头县| 阿巴嘎旗| 奈曼旗| 陈巴尔虎旗| 黄冈市| 北碚区| 苍梧县| 安西县| 抚远县| 扎赉特旗| 龙口市| 高清| 文安县| 前郭尔| 西林县| 延吉市| 松潘县| 黄龙县| 伊宁县| 衡山县| 江阴市| 美姑县| 化州市| 大城县| 延边| 江源县|