Замена стандартной камеры в electron для всех browser view

Есть задача - менять камеры во всех browser view при смене камеры в browser view. Сейчас я корректно определяю камеры и пробрасываю в browser view нужные deviceId.

Проблема в том что в таком случае меняется только при показе для самого пользователя, но если позвонить кому-то по видеосвязи то останется стандартная вебка.

Вижу два решения:

  • Изменить дефолтное медиа устройства до загрузки browser view
  • Удалить все ненужные медиа девайсы, чтобы осталось только 1 устройство нужное.

Ни то ни то решение я не смог найти. Прошу помощи у вас :)

render:

const [devices, setDevices] = useState([])
  const [currentDevice, setCurrentDevice] = useState({audio: '', video: ''})

  const initDevices = () => {
    navigator.mediaDevices.getUserMedia({audio: true, video: true})
      .then(() => navigator.mediaDevices.enumerateDevices())
      .then((deviceInfo) => {
        setDevices(deviceInfo.map(item => ({
          kind: item.kind,
          label: item.label,
          deviceId: item.deviceId
        })))
      }).catch(console.error)
  }

  useEffect(() => {
    initDevices()
  }, [])

  const onChangeHandler = ({e, type}) => {
    setCurrentDevice((prev) => ({...prev, [type]: e.target.value}))
    electron.setMediaDevices(e.target.value)
  }

main.js

for (const item in browserViewList) {
    if (!browserViewList[item]) continue
    browserViewList[item].forEach((item) => {
      item.browserView.webContents.send(events.setMediaDevices, params)
    })
  }

preload.js

ipcRenderer.on(events.setMediaDevices, (e, device) => {
  navigator.mediaDevices.enumerateDevices().then((devicesInfo) => {
    const audio = devicesInfo.find(item => item.label === device)?.deviceId
    const video = devicesInfo.find(item => item.label === device)?.deviceId

    return navigator.mediaDevices.getUserMedia({
      audio: {deviceId: audio ? {exact: audio} : undefined},
      video: {deviceId: video ? {exact: video} : undefined}
    })
  }).then(stream => {
    const video = document.querySelector('#video_video')
    if (!video) return

    video.srcObject = stream
    video.play()
  }).catch(console.error)
})

Ответы (0 шт):