node.js - 在 Mac OS 上使用 WebRTC 和 Electron 进行屏幕共享和视频/音频通话
问题描述
我正在尝试创建一个电子应用程序,它可以使用 webrtc 与系统音频共享桌面,如果我设置了约束:
const constraints = {
audio: {
mandatory: {
chromeMediaSource: 'desktop'
}
},
video: {
mandatory: {
chromeMediaSource: 'desktop'
}
}
}
我遇到了这个问题Mac OS 音频:
ERROR:adm_helpers.cc(73)] 无法查询立体声录音。然后是“ NotFoundError: Requested device not found ”
解决方案
您需要使用电子的desktopCapturer
api。
例子 -
// In the renderer process.
const {desktopCapturer} = require('electron')
desktopCapturer.getSources({types: ['window', 'screen']}, (error, sources) => {
if (error) throw error
for (let i = 0; i < sources.length; ++i) {
if (sources[i].name === 'Electron') {
navigator.mediaDevices.getUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: sources[i].id,
minWidth: 1280,
maxWidth: 1280,
minHeight: 720,
maxHeight: 720
}
}
})
.then((stream) => handleStream(stream))
.catch((e) => handleError(e))
return
}
}
})
function handleStream (stream) {
const video = document.querySelector('video')
video.srcObject = stream
video.onloadedmetadata = (e) => video.play()
}
function handleError (e) {
console.log(e)
}
并使用audio
上面的标志在屏幕共享时获取音频。
推荐阅读
- reactjs - 功能组件中 Popper 的 AnchorEl
- zalenium - 有谁知道如何处理浏览器身份验证
- uwp - 验证在 Microsoft Store 中购买的订阅?
- reactjs - 使用反应测试库测试文档对象
- symfony - API 平台:使用组字段的搜索过滤器
- ios - 如何使多个右栏按钮项在导航栏中垂直堆叠?
- javascript - FlotChart - 如何为折线图中的特定系列分配颜色?
- excel - 如何使用powershell更改excel CSV保存中的分隔符
- c# - Zebra 扫描仪 8178 onBarcode 读取事件未触发
- angular - 路由激活的任何保护激活