#node.js #electron #desktopcapturer
#node.js #электрон #desktopcapturer
Вопрос:
У меня есть следующий код, который пытается захватить аудио / видео из определенного приложения, запущенного на моем рабочем столе Windows:
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<title>Audio and Video</title>
</head>
<body>
<video autoplay></video>
<script type = "text/javascript">
var desktopCapturer = require('electron').desktopCapturer;
console.log("are you here?")
console.log(desktopCapturer)
desktopCapturer.getSources({ types: ['window', 'screen'] }).then(async sources => {
for (const source of sources) {
if (source.name === 'MyStreamingApp') {
try {
const stream = await navigator.mediaDevices.getUserMedia({
audio: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: source.id,
}
},
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: source.id,
minWidth: 1280,
maxWidth: 1280,
minHeight: 720,
maxHeight: 720
}
}
})
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)
}
</script>
</body>
</html>
Когда я запускаю это, я слышу звук … но, конечно, я не могу сказать, идет ли звук из исходного приложения Windows или приложения electron
Вопросы
Любые предложения о том, как это проверить? Как я могу доказать себе, что приложение electron тоже отправляет аудио? Например, есть ли способ «сказать» electron воспроизводить звук с помощью определенного устройства, а не только на стандартных динамиках / выходе для компьютера?
Я предполагаю, что это способ захвата аудио / видео из определенного приложения, которое запущено, вместо того, чтобы получать аудио / видео из динамиков системы в целом. Верно ли это предположение?
Редактировать 1
После публикации я просмотрел это руководство:
https://www.electronjs.org/docs/api/desktop-capturer ?q = console.log
Я изменил код так, чтобы для аудио я не указывал идентификатор источника, например:
const stream = await navigator.mediaDevices.getUserMedia({
audio: {
mandatory: {
chromeMediaSource: 'desktop',
//when capturing audio, need to remove the sourceid constraint.
//chromeMediaSourceId: source.id,
}
},
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: source.id,
minWidth: 1280,
maxWidth: 1280,
minHeight: 720,
maxHeight: 720
}
}
})
И теперь… когда я запускаю приложение electron и запускаю свое av-приложение, приложение electron отправляет нарезанный звук. он настолько сильно искажен, что я ничего не могу разобрать…
Между тем, я все еще слышу звук из исходного приложения. Итак, я полагаю, я доказал, что он захватывает некоторый звук… но это настолько плохо, что непригодно для использования.
Основываясь на примечаниях в документации, на том факте, что в ней говорится НЕ указывать идентификатор источника при потоковой передаче аудио, я собираюсь предположить, что вы можете использовать electron как есть для получения звука из определенного приложения Windows. Вы можете запросить только весь звук рабочего стола. Но было бы неплохо, если бы кто-то с большим опытом мог подтвердить.
Спасибо.
Комментарии:
1. Вы нашли решение? Возникает та же проблема — необходимо получить указанный звук окна, но поступает только звук начального рабочего стола.