首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >摄像头视频流的访问像素(JS/WebRTC/MediaStreamTrack)

摄像头视频流的访问像素(JS/WebRTC/MediaStreamTrack)
EN

Stack Overflow用户
提问于 2019-03-06 15:11:34
回答 1查看 1.7K关注 0票数 2

为了科学的应用,我需要在JavaScript中对从网络摄像头接收到的视频流进行实时处理。

WebRTC使在网站上显示实时流变得简单,并且使用<canvas>也允许拍摄和处理截图

我需要跟踪视频图像的亮度。因此,随着时间的推移,我需要的是几个像素的流(它们的RGB值)。将<video>复制到<canvas>每秒30次似乎效率很低,仅仅为了获得一幅静止的图像和分析一个fews像素.

有什么方法可以更直接地访问MediaStreamTrack的视频内容吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-07 03:03:03

有什么方法可以更直接地访问MediaStreamTrack的视频内容吗?

不是实时的,不是。W3C已经讨论过在工作人员中添加这样一个API,但是现在不存在。

MediaRecorder API非常接近:它可以以毫秒间隔(参见开始(时间))为您提供大量数据,但并不是实时的。

看起来效率很低..。

现代浏览器有后台线程,可以像向下缩放一样进行繁重的工作,所以我要提醒您不要过早地进行优化。通常情况下,只有当比特被大量暴露到主线程JavaScript时才会减慢速度。因此,我担心的不是你的相机分辨率,而是你画布的大小。

如果你只需要几个像素的亮度,让你的画布真的很小。费用应该很低。例如。

代码语言:javascript
复制
video.srcObject = await navigator.mediaDevices.getUserMedia({video: true});
await new Promise(r => video.onloadedmetadata = r);
const ctx = canvas.getContext('2d');
requestAnimationFrame(function loop() {
  ctx.drawImage(video, 0, 0, 16, 12);
  requestAnimationFrame(loop);
});
代码语言:javascript
复制
<canvas id="canvas" width="16" height="12"></canvas>

如果开销仍然是一个问题,我会降低帧速率。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55026326

复制
相关文章

相似问题

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