问题描述
大家好
我的工作:
我通过 Flask socket-io 将实时相机图像数据(jpeg 编码为二进制)传输到客户端, 套接字消息有一个框架和一些元数据。
每条发出的消息总共大约 ~350KB。
当我流式传输一台相机时,chrome devtools 上的套接字消息的大小向我显示了正确的大小。
当我流式传输多个摄像头的套接字消息时,有时会增长到 3MB,当我在 python 端记录大小时,每个发出的消息仍然约为 350KB。
谁能解释一下为什么会这样?谢谢
代码:
这个函数在python端发送帧
@socket_io.on('frame_request')
def connect(data):
while app.socket_online:
frame = app.dm.get_frame_as_bytes(data["id"])
emit('data',{'Meta': app.dm.get_Meta_data(data["id"]),'frame': frame})
socket_io.sleep(1/12)
这个函数接收传入的帧
handle_frame(frame) {
var blob = new Blob([frame],{
type: 'image/jpeg'
});
var url_create = window.URL || window.webkitURL;
var imageUrl = url_create.createObjectURL(blob);
this.img = imageUrl;
}
解决方法
您正在使用 Socket.IO 的轮询传输。这种传输可以在某些情况下,当以高频率发送时,将多个数据包合并到一个轮询响应中以提高效率。
如果您启用 WebSocket(无论如何您应该启用它,因为它会给您带来更好的性能),那么每个帧都将在其自己的单独数据包中发送。