WebRTC 摄像头 → Rust WASM → 实时滤镜
需要摄像头权限。所有画面帧均由 WASM 处理。
打开摄像头,把每一帧画面实时交给 WASM 做滤镜处理。和「图像滤镜」用的是完全相同的 Rust 函数,只是输入从一张静态图片变成了每秒几十帧的视频流。
5 种滤镜的算法与「图像滤镜」相同:灰度(BT.601 加权亮度)、反色、3×3 均值模糊、Sobel 边缘检测、方向卷积浮雕。区别在于它们必须在一帧的时间(约 33ms)内完成,才能保持画面流畅。
getUserMedia() 请求 320×240 的摄像头视频流,放入隐藏的 <video> 元素。requestVideoFrameCallback,不支持时退回 requestAnimationFrame),JS 把这一帧画到左侧 Canvas,再用 getImageData() 取出像素。apply_filter(),由 Rust 处理这一帧的像素。putImageData() 到右侧 Canvas,并统计 FPS 和每帧耗时。http://localhost 访问可以使用,通过局域网 IP 访问则需要 HTTPS。源码crates/media/image-filter/src/lib.rs与图像滤镜共用www/video-filter/index.js