Electron采集桌面共享和系統(tǒng)音頻(桌面捕獲)實例
Electron 開發(fā)音視頻
在使用 Electron 開發(fā)音視頻項目的時候,我們不可避免會 遇到桌面共享這種場景。
webRTC 提供了, getUserMedia 方法用于采集 用戶媒體數(shù)據(jù)。比如攝像頭,麥克風。
設置主進程信息
我們需要先在Electron 中,先創(chuàng)建窗體并載入入口 index 文件。
代碼如下:
const { app, BrowserWindow, desktopCapturer, ipcMain } = require('electron') const path = require('path') let win = null; function createWindow () { win = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js') } }) win.loadFile('index.html') } app.whenReady().then(() => { createWindow() app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow() } }) }) app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } })
使用 desktopCapturer 模塊
desktopCapturer 模塊是Electron 提供的官方模塊用于捕獲系統(tǒng)桌面。 desktopCapture 支持捕獲,應用窗口 和 桌面兩種媒體源。
但是,此模塊有使用限制,需要在主進程進行調(diào)用。 所以我們需要用到 Electron 中進行間通信的方式。
所以我們需要通過, IPC 通訊的形式,讓我們,在渲染進程中進行調(diào)用。
首先,我們在 main.js 中,通過 ipcMain 注冊一個方法,getSources
// .... other code ipcMain.handle('getSources', async () => { return await desktopCapturer.getSources({ types: ['window', 'screen'] }) })
接著,我們在渲染進程中,通過 ipcRenderer 去invoke 調(diào)用此方法便實現(xiàn)了,這個調(diào)用過程。
// .... other codes const inputSources = await ipcRenderer.invoke('getSources') // ... other codes
獲得source 列表后, 我們在渲染進程中,通過 HTML5 的 getUserMedia 進行捕獲具體窗口或者桌面。
示例代碼:
// ... // other Code let constraints = { audio: { mandatory: { chromeMediaSource: 'desktop' } }, video: { mandatory: { chromeMediaSource: 'desktop', chromeMediaSourceId: sourceId } } } const stream = await navigator.mediaDevices .getUserMedia(constraints); handleStream(stream); function handleStream (stream) { const video = document.querySelector('video') video.srcObject = stream video.onloadedmetadata = (e) => video.play() } // ... // other code
至此我們就完成了, 桌面視頻數(shù)據(jù)采集了。
后續(xù)我們,可以對采集到的數(shù)據(jù)進行 ,本地錄制或者 通過webrtc 推到遠端等一系列操作。
總結
在electron 中實現(xiàn)桌面共享 和 chrome web 中差異還是蠻大的, 在chrome 中我們只需要調(diào)用 getDisplayMedia
方法就能喚起桌面選擇和畫面采集。
但在electron 中,我們需要使用到, 進程間通信模塊 ipc 、 桌面采集模塊 desktopCapturer
、以及HTML5 的getUserMedia 方法才能完成整個桌面采集的過程。
關于完整代碼,我上傳到了github。
DEMO 代碼: https://github.com/shitouzxy/Electron-screenCapturerer-demo
以上就是Electron采集桌面共享和系統(tǒng)音頻(桌面捕獲)實例的詳細內(nèi)容,更多關于Electron桌面捕獲的資料請關注腳本之家其它相關文章!
相關文章
Vue使用distpicker插件實現(xiàn)省市級下拉框三級聯(lián)動
這篇文章主要介紹了Vue使用distpicker插件實現(xiàn)省市級下拉框三級聯(lián)動,比如通過JSON文件生成對應的區(qū)域下拉框,element-china-are插件,包括distpicker插件,通過代碼講解如何使用distpicker插件實現(xiàn)省市級三聯(lián)跳動,需要的朋友可以參考下2023-02-02vue中調(diào)用百度地圖獲取經(jīng)緯度的實現(xiàn)
最近做個項目,需要實現(xiàn)獲取當前位置的經(jīng)緯度,所以本文主要介紹了vue中調(diào)用百度地圖獲取經(jīng)緯度的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08vue將data恢復到初始狀態(tài) && 重新渲染組件實例
這篇文章主要介紹了vue將data恢復到初始狀態(tài) && 重新渲染組件實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09Vue通過URL傳參如何控制全局console.log的開關詳解
這篇文章主要給大家介紹了關于Vue根據(jù)URL傳參如何控制全局console.log開關的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-12-12