【发布时间】:2012-06-06 17:45:28
【问题描述】:
我正在尝试使用从 C# 应用程序捕获的图像创建 HTML5“远程桌面”。图像被转换成 base64 字符串并通过 socket.io 发送到页面并显示在画布上。它在我的 PC 上运行良好,但在任何速度较慢的计算机上都不能。它似乎无法足够快地更新并导致页面崩溃。这是“接收”操作代码:
socket.of('/1').on('receive', function (data) {
var img = new Image();
img.onload = function () {
context.drawImage(img, 0, 0, example.width, example.height);
};
img.src = "data:image/png;base64," + data.message;
});
数据每 34 毫秒发送一次,因此画布以大约 29 fps 的速度更新,看起来像是一个实时视频。有没有办法可以接收数据并在另一个“线程”中绘制图像?或者任何人都可以建议如何解决这个问题?感谢您的帮助。
【问题讨论】:
-
也许浏览器崩溃了,因为下一个数据包在它完成第一个渲染之前就进来了。尝试跳过从您收到数据包到 drawImage 调用完成之间的数据包。
-
为什么每帧都是一个新图片?另外:大多数视频编解码器不会每帧发送完整帧是有原因的......
-
嘿。 @JonBenedicto 我不认为是这样,因为即使注释掉上面的行但离开事件,它仍然会滞后和崩溃。不过还是谢谢。
-
@MarcGravell 视频编解码器是如何做到的?每次发送半帧并合并它们?你有什么建议?
-
@Joey 视频编码通常根据现有帧的巧妙增量来工作。
标签: c# javascript canvas live-streaming