Node.js 更快的媒体流图像捕获(在nodejs中将媒体流读取为缓冲区)

Node.js 更快的媒体流图像捕获(在nodejs中将媒体流读取为缓冲区),node.js,performance,electron,image-capture,mediastream,Node.js,Performance,Electron,Image Capture,Mediastream,编辑:我需要在现场执行此操作。我迫不及待地想等溪流结束 我从electron的desktopCapturer获取MediaStream对象: navigator.mediaDevices.getUserMedia({ audio: false, video: { mandatory: { chromeMediaSource: 'desktop', chromeMediaSourceId: source.id, minWidth: 800,

编辑:我需要在现场执行此操作。我迫不及待地想等溪流结束

我从electron的
desktopCapturer
获取
MediaStream
对象:

navigator.mediaDevices.getUserMedia({
  audio: false,
  video: {
    mandatory: {
      chromeMediaSource: 'desktop',
      chromeMediaSourceId: source.id,
      minWidth: 800,
      maxWidth: 800,
      minHeight: 800,
      maxHeight: 800,
    },
  },
})
.then((stream) => {
我正在尝试使用
ImageCapture
获取静止帧的节点
缓冲区

  const track = stream.getVideoTracks()[0];
  const capturedImage = new ImageCapture(track);

  capturedImage // This takes 200ms for 1000x1000
    .takePhoto()
    .then(blob => {
      toBuffer(blob, function (err, buffer) { // 1.5 ms
        if (err) throw err;
          // TODO: Do some opencv magic with node buffer
      });
    })
    .catch(error => console.error('takePhoto() error:', error));

但是拍摄照片要花很长时间。有没有可能使过程更快?我是否可以直接在
nodejs
中访问
MediaStream
。事实上,它真的很有表现力

}).then((stream) => {
  const video = document.createElement('video');
  video.srcObject = stream;
  video.onloadedmetadata = () => {
  video.play();
  setInterval(() => {
    const canvas = document.createElement('canvas');
    canvas.getContext('2d').drawImage(video, 0, 0, 800, 800);
    canvas.toBlob(blob => {
      toBuffer(blob, function (err, buffer) {
        if (err) throw err;
        // do some magic with buffer
      });
    });
  }, 40);
};