首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在后台运行requestAnimationFrame

在后台运行requestAnimationFrame
EN

Stack Overflow用户
提问于 2017-10-16 16:26:18
回答 1查看 1.4K关注 0票数 3

我正在使用requestAnimationFrame来制作视频流的动画,我知道请求动画不能在后台工作,所以有没有办法让它在后台运行。

我知道我们也可以使用setInterval或setTimeout制作动画,但当我使用它们时,动画无法正常工作,视频流中的图像闪烁。

下面是我的代码:

代码语言:javascript
复制
const drawFrame = function drawFrame() {
            if (!ctx) {
                ctx = canvas.getContext('2d');
            }
            if (!tmpCanvas) {
              tmpCanvas = document.createElement('canvas');
              tmpCtx = tmpCanvas.getContext('2d');
              tmpCanvas.width = canvas.width;
              tmpCanvas.height = canvas.height;
            }
            tmpCtx.drawImage(videoElement, 0, 0, tmpCanvas.width, tmpCanvas.height);
            const imgData = tmpCtx.getImageData(0, 0, tmpCanvas.width, tmpCanvas.height);
            const data = selectedFilter(imgData);
            ctx.putImageData(data, 0, 0);
            if (!stopped) {
              requestAnimationFrame(drawFrame);
            } else {
              tmpCanvas = null;
              tmpCtx = null;
              ctx = null;
            }
        };
        requestAnimationFrame(drawFrame);
EN

回答 1

Stack Overflow用户

发布于 2017-10-16 16:51:35

我猜你运气不好。requestAnimationFrame故意在后台暂停,因为动画没有理由在后台运行,而且正如您所提到的,setInterval和setTimeout不是为动画而设计的,也不应该这样使用。

您提到需要对视频流进行动画处理。您的意思是在视频标签上应用动画,或者通过画布元素更改视频元素的外观?在这两种情况下,你都不应该在后台继续这样做,但你可以尝试一下computeFrame (仅限火狐),它将在视频的每一帧中触发一次。或者,您实际上是通过连续设置一组静态图像的动画来伪造视频流?在这种情况下,为什么不使用video元素呢?

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

https://stackoverflow.com/questions/46765937

复制
相关文章

相似问题

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