我正在使用MediaRecorder API
在 Web 应用程序中录制视频。该应用程序可以选择在相机和屏幕之间切换。我正在使用 Canvas 来增强流记录。该逻辑涉及从相机捕获流并将其重定向到视频元素。然后在画布上渲染此视频,并将来自画布的流传递到MediaRecorder
. 我注意到的是,只要用户不切换/最小化 chrome 窗口,从屏幕切换到视频(反之亦然)就可以正常工作。画布渲染使用requestAnimationFrame
并在选项卡失去焦点后冻结。
有没有办法指示 chrome 不要暂停执行requestAnimationFrame
?有没有其他方法可以在不影响MediaRecorder
录制的情况下切换流?
更新: 通读文档后,播放音频或具有活动 websocket 连接的选项卡不会受到限制。这是我们目前没有做的事情。这可能是一种解决方法,但希望社区提供任何替代解决方案。(setTimeout 或 setInterval 过于节流,因此不使用它,而且它会影响渲染质量)
更新 2: 我可以使用 Worker 解决这个问题。工作人员调用 API 并通过 postMessage 将通知发送到主线程,而不是为 requestAnimationFrame 使用主 UI 线程。UI Thread 完成渲染后,会向 Worker 发送一条消息。还有一个增量周期计算来限制来自工人的压倒性消息。