getUserMedia () захватывает только содержимое окна - PullRequest
2 голосов
/ 12 апреля 2020

Используя реализацию Electron для desktopCapturer, я пытаюсь отразить только содержимое внешнего окна в моем приложении Electron. navigator.mediaDevices.getUserMedia выглядел как идеальная вещь для этого, но он дает мне содержимое окна и chrome - кроме того, тема окна не соответствует моей теме рабочего стола.

В идеале, Я просто хочу отобразить содержимое указанного окна. Я не вижу ничего, что могло бы сказать, что я просто хочу содержимое окна, и я не вижу никакого способа обрезать поток - но даже если бы это было так, поскольку темы окон не совпадают, я не думаю, что я мог бы просто указать некоторые c смещений для использования.

Есть ли способ сделать это с помощью getUserMedia? Или есть лучший вариант, возможно, FFMPEG? Я надеялся использовать как можно меньше внешних «инструментов», но если это мой единственный вариант, ну да ладно:)

Вот фрагмент кода Electron:

const { desktopCapturer } = require('electron')

desktopCapturer.getSources({ types: ['window', 'screen'] }).then(async sources => {
  for (const source of sources) {
    if (source.name === 'My Window Name') {
      try {
        const stream = await navigator.mediaDevices.getUserMedia({
          audio: false,
          video: {
            mandatory: {
              chromeMediaSource: 'desktop',
              chromeMediaSourceId: source.id,
              minWidth: 800,
              maxWidth: 800,
              minHeight: 400,
              maxHeight: 400
            }
          }
        })
        handleStream(stream)
      } catch (e) {
        handleError(e)
      }
      return
    }
  }
})

function handleStream (stream) {
  const video = document.querySelector('video')
  video.srcObject = stream
  video.onloadedmetadata = (e) => video.play()
}

Вот несколько фотографий того, что Я имею в виду, что темы окон не совпадают:

Фактическое окно на моем рабочем столе: actual

Окно, отраженное в моем приложении Electron: mirror

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...