一起发送 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的主要内容,如果未能解决你的问题,请参考以下文章

将 MySQL blob 内容作为 json 响应发送

如何从 azure blob 存储中获取 json 数据并使用 azure 数据工厂将其发送到 power apps dataverse

如何使用 axios 将文件和 JSON 数据一起发送到 API 端点?

尝试发送 json 对象时,fetch api 如何与 express 一起使用

两个数组的索引相同的放在一起,转为json发送给后台

如何发送带有 URL 参数和 JSON 正文的 POST? [关闭]