首页 > 解决方案 > 在 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

标签: node.jsmacoselectronwebrtcgetusermedia

解决方案


您需要使用电子的desktopCapturerapi。

例子 -

// 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上面的标志在屏幕共享时获取音频。

更多细节在这里 - https://electronjs.org/docs/api/desktop-capturer


推荐阅读