gpt4 book ai didi

javascript - 无法通过 Flask-socketIO 服务器在 HTML 客户端中显示来自 Python 客户端的视频流

转载 作者:太空宇宙 更新时间:2023-11-03 20:32:09 24 4
gpt4 key购买 nike

我想在 HTML 页面中显示来 self 的 jetson nano 的视频流,但似乎我无法使其按我希望的方式工作。我有一个 python 中的flask-socketIO 服务器,我有我的 python 客户端,它将每个帧发送到该服务器(这是我的网络摄像头所连接的位置),然后服务器将数据广播到由 Flask-socketIO 渲染的 HTML 客户端在浏览器控制台中,我可以看到数据,但不显示图像。

我还尝试直接从服务器显示数据而不广播到 HTML,但这是同样的问题。使用openCV,我无法使用imshow来显示图像,但我可以使用imwrite将帧保存到磁盘上。

这是我的 python 客户端的代码,基本上,它检索帧,将其转换为字节,然后编码为 Base 64 并使用 socketIO 发出

while(stream):
ret, frame = cap.read()
_, buff = cv2.imencode('.jpeg', frame)
jpg_as_text = base64.b64encode(buff)
socketIO.emit('my image data', {'image': True, 'buff': jpg_as_text})

这里是服务器端。它只是将数据从 python 客户端广播到 HTML 客户端:

@socketio.on('my image data')
def broadcast_img(data):
emit('imageStream', data, broadcast=True)

这是由服务器呈现的 HTML 客户端:

var ctx = document.getElementById("myStream").getContext('2d');
var socket = io();
socket.on('imageStream', function(data) {
console.log(data)
if(data.image) {
var img = new Image();
img.src = 'data:image/jpeg;base64,' + data.buff;
ctx.drawImage(img, 0, 0);
}
});

当我打开浏览器并检查控制台时,我可以看到 buff 的值。它以/9j/4AAQ 开头......我认为这是编码图像

有人知道为什么我无法显示图像吗?

提前致谢

最佳答案

data.buff 是一个 ArrayBuffer,您必须将其解码为字符串:

const decoder = new TextDecoder();
img.src = 'data:image/jpeg;base64,' + decoder.decode(data.buff);

此外,您不必对图像数据进行 Base64 解码。您可以只发出二进制数据

_, buff = cv2.imencode('.jpeg', frame)
socketIO.emit('my image data', {'image': True, 'buff': BytesIO(buff).getvalue()})

并在客户端上使用它,如下所示:

const arrayBufferView = new Uint8Array(data.buff);
const blob = new Blob([arrayBufferView], {type: 'image/jpeg'});
img.src = URL.createObjectURL(blob);

关于javascript - 无法通过 Flask-socketIO 服务器在 HTML 客户端中显示来自 Python 客户端的视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57425864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com