我正在使用WebGL将2D图像合成到画布中。我还想通过WebRTC在网络上传输这些图像的稍有不同的版本。
我现在正在做的是使用数据通道发送从画布提取的PNG。虽然这可以正常工作,但速度较慢(对PNG进行编码不是免费的,也不是硬件加速的),并且不适用于动画(所做的更改仅会影响约30fps的一小部分图像)。
画布的captureStream()
接口允许我从其渲染缓冲区提取视频供稿,然后可以将其供入WebRTC。视频编解码器可以解决我现在必须手动解决的所有效率问题,这非常好。我可以使用它,但是有很多问题:
captureStream
不允许我指定屏幕外渲染缓冲区,因此我必须为每个流打开一个附加的WebGL上下文(每个流都需要加载多个MB的纹理)。requestFrame()
似乎没有任何作用。我读到它需要改变图片。重新渲染整个框架非常昂贵,除非实际情况有所变化,否则我想避免这种情况。WebGL没有显式的渲染调用(例如某些OpenGL实现中的swapbuffer),那么用于确定图片中实际发生变化的东西是什么?我能以某种方式伪造它而不实际重新呈现任何东西吗?
有人知道这种方法是否有解决方法吗?似乎WebRTC标准会竭尽所能阻止此用例,仅启用网络摄像头视频供稿。