Используя реализацию 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()
}
Вот несколько фотографий того, что Я имею в виду, что темы окон не совпадают:
Фактическое окно на моем рабочем столе:
Окно, отраженное в моем приложении Electron: