// import * as fs from 'fs'
const gui = window.require('nw.gui')
// const appWindow = gui.Window.get()
// const toBuffer = require('blob-to-buffer')
export default class Capturer {
constructor (fsys, dom) {
this.fsys = fsys
this.dom = dom
// custom method
Capturer.detectDesktopStreamId((id) => {
this.start(id)
})
/* standard method
gui.Screen.chooseDesktopMedia(['window', 'screen'], (id) => {
this.start(id)
})
*/
}
static detectDesktopStreamId (cb) {
const dcm = gui.Screen.DesktopCaptureMonitor
gui.Screen.Init()
console.log('gui.Screen', gui.Screens)
// New screen target detected
dcm.on('added', (id, name, order, type) => {
console.log('gui.Screen.DesktopCaptureMonitor', name, id, type)
// We are interested only in screens
if (type !== 'screen') {
return
}
console.log('.DesktopCaptureMonitor registerStream id', id)
cb(dcm.registerStream(id))
dcm.stop()
})
dcm.start(true, true)
}
takeScreenshot () {
const base64Data = this.dom.getVideoFrameAsBase64()
return base64Data
}
start (desktopStreamId) {
navigator.webkitGetUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: desktopStreamId,
minWidth: 1280,
maxWidth: 1920,
minHeight: 720,
maxHeight: 1080
}
}
}, (stream) => {
this.dom.video.srcObject = stream
}, (error) => {
console.log('navigator.getUserMedia error: ', error)
})
}
stop () {
// this.mediaRecorder.stop()
}
}
参考项目:github.com/girtri/scre…