将网络摄像头流作为 WebGL 纹理进行操作?

Dom*_*Bal 7 video canvas webgl html5-video webrtc

将网络摄像头流直接获取到 WebGL 作为纹理的最有效方法是什么?

标准流程(如 Three.js 中所述)是使用 video 标签,然后在 canvas 标签中操作它,然后从 canvas 到 WebGL。

这会增加 CPU 开销,并且 Chrome 会启动工作线程将图像数据从相机发送到 GPU(例如每秒 30 次)。

有没有什么方法可以更有效地做到这一点并减少 CPU 上的渲染/处理?

小智 1

最简单的方法是简单地将流放入视频 HTML 元素中,然后将其转换为纹理。这种方式会导致 fps 较低。幸运的是,有一个库可以快速完成此操作。我不明白到底是怎么回事(可能从流本身中提取纹理,或者优化第一种方法)。

https://p5js.org/examples/dom-video-capture.html https://p5js.org/examples/3d-shader-using-webcam.html#

您可以检查源代码以了解他们是如何做到的。 https://github.com/processing/p5.js/

当我比较这两种方法时,第二种方法的速度为 60fps,而第一种方法的着色器速度为 20fps。