Electron - Captura de Áudio e Vídeo
A captura de áudio e vídeo são características importantes se você estiver criando aplicativos para compartilhamento de tela, memos de voz, etc. Eles também são úteis se você precisar de um aplicativo para capturar a imagem do perfil.
Estaremos usando a API getUserMedia HTML5 para capturar fluxos de áudio e vídeo com Electron. Vamos primeiro configurar nosso processo principal nomain.js arquivo da seguinte forma -
const {app, BrowserWindow} = require('electron')
const url = require('url')
const path = require('path')
let win
// Set the path where recordings will be saved
app.setPath("userData", __dirname + "/saved_recordings")
function createWindow() {
win = new BrowserWindow({width: 800, height: 600})
win.loadURL(url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}))
}
app.on('ready', createWindow)
Agora que configuramos nosso processo principal, vamos criar o arquivo HTML que irá capturar este conteúdo. Crie um arquivo chamadoindex.html com o seguinte conteúdo -
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<title>Audio and Video</title>
</head>
<body>
<video autoplay></video>
<script type = "text/javascript">
function errorCallback(e) {
console.log('Error', e)
}
navigator.getUserMedia({video: true, audio: true}, (localMediaStream) => {
var video = document.querySelector('video')
video.src = window.URL.createObjectURL(localMediaStream)
video.onloadedmetadata = (e) => {
// Ready to go. Do some stuff.
};
}, errorCallback)
</script>
</body>
</html>
O programa acima irá gerar a seguinte saída -
Agora você tem o stream de sua webcam e de seu microfone. Você pode enviar este stream pela rede ou salvá-lo em um formato de sua preferência.
Dê uma olhada na documentação do MDN para capturar imagens para obter as imagens de sua webcam e armazená-las. Isso foi feito usando a API HTML5 getUserMedia . Você também pode capturar a área de trabalho do usuário usando o módulo desktopCapturer que vem com o Electron. Vamos agora ver um exemplo de como obter o fluxo de tela.
Use o mesmo arquivo main.js acima e edite o arquivo index.html para ter o seguinte conteúdo -
desktopCapturer.getSources({types: ['window', 'screen']}, (error, sources) => {
if (error) throw error
for (let i = 0; i < sources.length; ++i) {
if (sources[i].name === 'Your Window Name here!') {
navigator.webkitGetUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: sources[i].id,
minWidth: 1280,
maxWidth: 1280,
minHeight: 720,
maxHeight: 720
}
}
}, handleStream, handleError)
return
}
}
})
function handleStream (stream) {
document.querySelector('video').src = URL.createObjectURL(stream)
}
function handleError (e) {
console.log(e)
}
Usamos o módulo desktopCapturer para obter as informações sobre cada janela aberta. Agora você pode capturar os eventos de um aplicativo específico ou de toda a tela dependendo do nome que você passar para o acimaif statement. Isso irá transmitir apenas o que está acontecendo naquela tela para o seu aplicativo.
Você pode consultar esta pergunta StackOverflow para entender o uso em detalhes.