我尝试将640 * 480画布的内容发送到WebSocket服务器。
Javascript相关部分在这里:
// Get the image data
var imageData = tCtx.getImageData (0, 0, 640, 480);
var buf = imageData.data;
var limit = buf.byteLength / 4;
var buffer = new Uint8ClampedArray(921600);
for (var i = 0; i < limit; ++i) {
var originOffset = 4 * i;
var targetOffset = 3 * i;
buffer[targetOffset] = buf[originOffset + 2];
buffer[targetOffset + 1] = buf[originOffset + 1];
buffer[targetOffset + 2] = buf[originOffset];
}
// Send the data
ws.send (buffer);
for循环只是将RGBA格式从画布转换为BGR,以便用OpenCV显示图片。
在Firefox上它可以工作,在我的服务器上我收到了921600个字节(我使用了libwebsockets),我甚至可以用OpenCV显示图片。 但是在Chrome上,当我尝试发送这些数据时,服务器没有收到字节,WebSocket连接也会关闭。
我尝试在发送之前对缓冲区进行切片,然后我发现我可以通过Chrome发送的最大值大约为65000字节:即当我尝试70000时,它无法正常工作。
知道为什么吗?我能做些什么吗?我是否必须手动切片缓冲区并分批发送部件?我以为WebSockets应该照顾它? 在此先感谢: - )