为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法将视频数据从视频标签/媒体流发送到 OffscreenCanvas?

有没有办法将视频数据从视频标签/媒体流发送到 OffscreenCanvas?

叮当猫咪 2021-07-02 14:01:12
基本上我希望能够有效地执行相同的代码:const video = document.getElementById('video');const canvas = document.getElementById('canvas');const context = canvas.getContext('2d');const draw = () => {  context.drawImage(video, 0, 0);  requestAnimationFrame(draw);}video.onplay = () => {  requestAnimationFrame(draw);}仅使用屏幕外画布。我可以通过消息向屏幕外画布所在的工作人员发送图像,但不能发送视频,因为它直接绑定到HTMLElement. 目前有没有办法以某种方式仍然MediaStream在屏幕外画布中渲染视频数据或 a ?
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

您可以通过使用以下更改修改您的脚本,将视频帧发送到 Web Worker 中的 OffscreenCanvas:


const worker = new Worker('my-worker.js');

const video = document.getElementById('video');

const stream = video.captureStream();

const [track] = stream.getVideoTracks();

const imageCapture = new ImageCapture(track);

const canvas = document.getElementById('canvas');

const offscreen = canvas.transferControlToOffscreen();


worker.postMessage({ offscreen }, [offscreen]);


const draw = () => {

  imageCapture.grabFrame().then(imageBitmap => {

    worker.postMessage({ imageBitmap }, [imageBitmap]);

  });


  requestAnimationFrame(draw);

};


video.onplay = () => {

  requestAnimationFrame(draw);

};

my-worker.js

let canvas;

let context;


addEventListener('message', event => {

  if (event.data.offscreen) {

    canvas = event.data.offscreen;

    context = canvas.getContext('2d');

  } else if (event.data.imageBitmap && context) {

    context.drawImage(event.data.imageBitmap, 0, 0);

    // do something with frame

  }

});


查看完整回答
反对 回复 2021-07-15
  • 1 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信