【发布时间】:2021-12-20 21:52:24
【问题描述】:
我正在使用MediaRecorder API 在网络应用程序中录制视频。该应用程序可以选择在相机和屏幕之间切换。我正在使用 Canvas 来增强流记录。该逻辑涉及从相机捕获流并将其重定向到视频元素。然后在画布上渲染此视频,并将来自画布的流传递给MediaRecorder。
我注意到的是,只要用户不切换/最小化 chrome 窗口,从屏幕切换到视频(反之亦然)就可以正常工作。画布渲染使用requestAnimationFrame,并在选项卡失去焦点后冻结。
有什么办法可以指示chrome不要暂停requestAnimationFrame的执行?有没有其他方法可以在不影响MediaRecorder 录制的情况下切换流?
更新: 通读文档后,播放音频或具有活动 websocket 连接的选项卡不会受到限制。这是我们目前没有做的事情。这可能是一种解决方法,但希望社区提供任何替代解决方案。 (setTimeout 或 setInterval 过于节流,因此不使用它,而且会影响渲染质量)
更新 2: 我可以使用 Worker 来解决这个问题。工作人员调用 API 并通过 postMessage 将通知发送到主线程,而不是为 requestAnimationFrame 使用主 UI 线程。 UI Thread 完成渲染后,会向 Worker 发送一条消息。还有一个增量周期计算来限制来自工作人员的大量消息。
【问题讨论】:
-
可以包含您的代码的一部分吗?
-
嗨@clota974 感谢您的评论。调用 requestAnimationFrame 的代码/逻辑与在线提供的示例非常相似。我的问题是,当 chrome 窗口失去焦点或被最小化时,我需要一种解决方法/解决方案来不限制 requestAnimationFrame。
-
stackoverflow.com/questions/40687010/… 虽然我不确定那里接受的黑客仍然有效......(最后不作为骗子关闭,因为可能确实有方法可以在不依赖画布的情况下切换流)
-
嗨@Kaiido,感谢您的链接。但正如您在回答中提到的,它是否停止从画布捕获流到媒体流?
-
通常不会。但实际上,浏览器可能不会在画布上绘画……所以这并不可靠。但是我可能有一个解决方案......来自 Chrome。
标签: html web html5-canvas requestanimationframe web-mediarecorder