【发布时间】:2012-02-15 11:03:00
【问题描述】:
我正在使用websockify 将图像从 python 服务器显示到 HTML5 画布。
我认为我已经成功地从我的 python 服务器发送图像,但我无法将图像显示到我的画布上。
我认为问题与我试图在画布上显示的字节数有关,我相信我不会等到收到整个图像后再将图像显示到画布上。
到目前为止,我有:
on 消息功能。当我发送图像时,我在控制台中得到 12 MESSAGERECEIVED
ws.on('message', function () {
//console.log("MESSAGERECEIVED!")
msg(ws.rQshiftStr());
});
我收到字符串并尝试在画布上显示它的 msg 函数。我为每张图片调用该方法 12 次。刺痛的格式是'xÙõKþ°pãüCY:
function msg(str) {
//console.log(str);
console.log("RELOAD");
var ctx = cv.getContext('2d');
var img = new Image();
//console.log(str);
img.src = "data:image/png;base64," + str;
img.onload = function () {
ctx.drawImage(img,0,0);
}
}
关于如何解决此问题的任何建议?
【问题讨论】:
-
除非客户端不支持 hybi 草稿,否则不应通过 websockets 以 base64 格式传输图像。 Base64 将产生 33% 的开销。因此,最好以二进制形式发送。
-
我认为
websockify正在将通过它传输的所有内容转换为 base64。 -
如果是这样,那就太可怕了。寻找另一个 websocket 实现。
-
@einaros,我在下面的回答中更全面地介绍了 base64 编码/解码,但总而言之,websockify 的重点是在大多数浏览器(不仅仅是现代浏览器)中透明地启用二进制数据.顺便说一句,github.com/einaros/ws 做得很好。我计划在不久的将来更新我的 websockify 节点实现(主要是 python,但我还有其他几个示例实现)以使用您的 lib。
标签: javascript websocket