Html5 canvas 使用websocket消息的HTML5快速呈现
我有一个简单的sockets服务器(socket.io),通过它发送图像流,当在画布中设置像素数据时(使用putImageData),性能太低。我试着使用以下方法Html5 canvas 使用websocket消息的HTML5快速呈现,html5-canvas,Html5 Canvas,我有一个简单的sockets服务器(socket.io),通过它发送图像流,当在画布中设置像素数据时(使用putImageData),性能太低。我试着使用以下方法 阴影画布画出屏幕,然后回到主画布上 类型1)使用drawImage渲染屏幕外画布 类型2)使用屏幕外画布上的getImageData和主画布上的putImageData 类型3)使用屏幕外的createImageData并通过putImageData进行设置 在动画帧更新期间,使用requestAnimFrame更新UI 我还
- 阴影画布画出屏幕,然后回到主画布上
- 类型1)使用drawImage渲染屏幕外画布
- 类型2)使用屏幕外画布上的getImageData和主画布上的putImageData
- 类型3)使用屏幕外的createImageData并通过putImageData进行设置
- 在动画帧更新期间,使用requestAnimFrame更新UI
或
作为drawImage()
图像源,不要执行任何getImageData()。这样,数据在解码后不会往返于GPU-CPU-GPU
如果填充屏幕外画布是一个瓶颈,那么您还可以使用经过特别调整的编解码器(未压缩的PNG)在服务器端创建轻量级图像元素,以便压缩不会延迟到进程。然后将这些PNG数据作为二进制websocket帧(无b64)进行流式处理。如果您使用的是正统的现代web浏览器,您可以完全跳过画布,只需将接收到的图像数据粘贴到图像标记中,然后使用一个。我真的需要使用画布,因为我正在将单个图像按位进行流式处理,并对图像进行更改。像瘦rdp客户机一样思考。好吧,那CreateImageData->PutImageData呢,那只是CPU到GPU的关系?正如我提到的,网络从来都不是一个真正的问题,因为当服务器发送时,我可以立即获得可用的东西。我在drawImage上更新了我的问题。最终一切都从CPU转到了GPU。当您使用本机图像元素时,浏览器代码应该为您进行优化。然而,我相信,除非你做一个孤立的例子,比如在jsfiddle.net上,我们可以运行你的代码并重复你的测量,否则你不可能帮助你提高效率。你可以简单地将资源作为数据URI等嵌入一个孤立的测试用例中,而不是使用基于网络的资源。