【发布时间】:2021-11-07 06:36:54
【问题描述】:
好的,所以问题有点多,但它实际上提到了我遇到的“错误”的每个部分。我不确定这是否真的是一个错误,或者是否有一些我还不明白的东西。我在 codepen 上创建了一个演示来重现奇怪的行为。
https://codepen.io/rroyerrivard/pen/jOwBLbB
就像我在 codepen 中写的那样,Chrome 中似乎存在一个错误,HTMLCanvasElement 的流在隐藏时不会在每次绘制图像时都被刷新。但要做到这一点,需要同时具备这 4 个条件。
- 我们必须通过调用
HTMLCanvasElement.captureStream()获得的MediaStream提供HTMLVideoElement(而不是直接显示HTMLCanvasElement)。 - 我们从中获得
MediaStream的HTMLCanvasElement必须隐藏(不在 DOM 中或使用 css 隐藏)。 - 我们必须利用来自
OffscreenCanvas的HTMLCanvasElement,我们从调用HTMLCanvasElement.transferControlToOffscreen()得到。 -
OffscreenCanvas的抽奖必须在将OffscreenCanvas转移到的网络工作者中完成。
我很不幸,在工作中的网络应用程序中同时遇到了所有这些条件。我可以通过不使用 transferControlToOffscreen() 调用并在从 web worker 接收到 ImageBitmap 后在主线程中绘制一个 ImageBitmap 来避免该错误,但这会将 FPS 降低大约 18%。
这是一个已知的错误吗?有没有办法强制MediaStream 在每次绘制OffscreenCanvas 时刷新?
【问题讨论】:
标签: javascript html5-canvas web-worker mediastream offscreen-canvas