一起发送 JSON 和 blob
Posted
技术标签:
【中文标题】一起发送 JSON 和 blob【英文标题】:Send JSON and blob together 【发布时间】:2018-12-13 00:39:55 【问题描述】:我正在编写一个简单的流媒体服务。
A 浏览器 A 打开一个到服务器的 Web 套接字,然后另一个浏览器 B 打开一个到同一服务器的新套接字。
浏览器 A 通过其摄像头(MediaRecorder API)注册视频并将其发送到服务器。
服务器将此视频广播到其他连接的浏览器。
我有一个带有 Socket.IO 的工作版本,但我想用普通 javascript 来做(Node.js 服务器上的 WebSocket.Server 和客户端上的 webSocket)。
这就是问题所在:
使用socket.io a 可以这样写:
this.socket.emit('broadcast',
stream: new Blob(stream, 'type': `video/webm$MEDIA_CHARSET`),
from: id: this.socket.id
);
Stream 来自 mediarecorder -> dataavailable 事件监听器
但是使用原生 websocket 我无法发送嵌入到 JSON 对象中的 blob,因为 websocket 只能发送字符串或数组缓冲区。
为了将 JSON 和 blob 一起发送,我尝试了许多不同的方法,但没有任何效果。
有什么帮助吗?
是否可以仅在客户端使用 Engine.IO 来将带有 blob 和 JSON 的消息打包在一起?对这种方式有什么想法吗?
【问题讨论】:
【参考方案1】:有很多方法可以序列化您的数据以通过二进制网络套接字发送。我建议考虑 CBOR,它可以序列化为二进制,并且还支持其中的二进制数据。
在 NPM 上有几个 CBOR 库可供选择。
【讨论】:
我查看了github.com/paroga/cbor-js,但似乎我仍然无法发送 blob 或 arraybuffer。似乎 lib 不管理 ArrayBuffer 数据类型,它发送一个空对象。这也是一个未解决的问题。 @wiulma 好像你只需要使用 Uint8Array 来代替......无论如何,CBOR 还有其他几个包。以上是关于一起发送 JSON 和 blob的主要内容,如果未能解决你的问题,请参考以下文章
如何从 azure blob 存储中获取 json 数据并使用 azure 数据工厂将其发送到 power apps dataverse
如何使用 axios 将文件和 JSON 数据一起发送到 API 端点?