nwjs桌面端实现截屏功能

576 阅读1分钟

// 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…