首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更快的MediaStream ImageCapture (读取媒体流作为nodejs中的缓冲区)

更快的MediaStream ImageCapture (读取媒体流作为nodejs中的缓冲区)
EN

Stack Overflow用户
提问于 2018-01-14 14:50:15
回答 1查看 1.7K关注 0票数 3

编辑:,我需要做这个live。我不能等到溪流结束。

我从电子的desktopCapturer中得到desktopCapturer对象

代码语言:javascript
复制
navigator.mediaDevices.getUserMedia({
  audio: false,
  video: {
    mandatory: {
      chromeMediaSource: 'desktop',
      chromeMediaSourceId: source.id,
      minWidth: 800,
      maxWidth: 800,
      minHeight: 800,
      maxHeight: 800,
    },
  },
})
.then((stream) => {

我正在尝试使用Buffer获取静止帧的节点ImageCapture

代码语言:javascript
复制
  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));

但是takePhoto需要花费相当长的时间。是否有可能使这一过程更快?我可以在MediaStream中直接访问nodejs吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-14 20:27:43

这就是我最后要做的。它实际上是真正的表演性。

代码语言:javascript
复制
}).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);
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48250790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档