Javascript CanvasRenderingContext2D drawImage来自非活动选项卡中的视频元素

Javascript CanvasRenderingContext2D drawImage来自非活动选项卡中的视频元素,javascript,google-chrome,html5-canvas,setinterval,Javascript,Google Chrome,Html5 Canvas,Setinterval,当浏览器挂起选项卡时(如果用户关注不同的选项卡),Chrome似乎有一个缺陷,即CanvasRenderingContext2D和drawImage来自视频元素 这样的代码在tab处于后台时不再有效,音频继续播放,视频的timeupdate事件像往常一样被触发,但drawImage在每个刻度上绘制相同的帧: const video = document.getElementById('video'); const canvas = document.createElement('canvas')

当浏览器挂起选项卡时(如果用户关注不同的选项卡),Chrome似乎有一个缺陷,即
CanvasRenderingContext2D
和drawImage来自视频元素

这样的代码在tab处于后台时不再有效,音频继续播放,视频的timeupdate事件像往常一样被触发,但drawImage在每个刻度上绘制相同的帧:

const video = document.getElementById('video');
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');

...

setInterval(() => ctx.drawImage(videoElement, 0, 0), 33);
此问题与计时器限制无关(使用后台工作人员的计时器事件进行测试,以相同的间隔在画布上绘制当前时间等)


有人知道为什么会发生这种情况,以及如何防止Chrome暂停视频元素吗?

这与Canvas无关。当文档被隐藏时。无论如何,我都会使用。我想我在我的问题中解释了它与计时器节流无关,如果没有足够突出显示的话,很抱歉。这显然是2d上下文的一个问题,因为具有完全相同计时器的完全相同的代码继续使用WebGL上下文。如何验证它是否有效?请注意,您的视频元素可能是第一个被限制的,而且如果它是静音的,在这种情况下,它甚至会被暂停。因此问题实际上是在
drawImage(video)
调用(fillText in my fiddle keeps working)中提醒的。听起来他们只是在屏幕外暂停视频流,除了改变他们的行为之外,不确定你能做什么。看起来你是对的-问题确实是视频组件在tab进入非活动模式时停止更新帧。