node.js - 一起发送 JSON 和 blob

标签 node.js websocket socket.io web-mediarecorder engine.io

我正在编写一个简单的流媒体服务。

A 浏览器 A 打开一个到服务器的 Web 套接字,然后另一个浏览器 B 打开一个到同一服务器的新套接字。

浏览器A通过其摄像头(MediaRecorder API)注册视频并将其发送到服务器。

服务器将此视频广播到其他连接的浏览器。

我有一个 Socket.IO 的工作版本,但我想用普通 JavaScript 来实现(Node.js 服务器上的 WebSocket.Server 和客户端上的 webSocket)。

这就是问题:

使用socket.io可以写这样的东西:

  this.socket.emit('broadcast', {
    stream: new Blob(stream, {'type': `video/webm${MEDIA_CHARSET}`}),
    from: {id: this.socket.id}
  });

Stream 来自 mediarecorder -> dataavailable 事件监听器

但是使用 native websocket,我无法发送嵌入到 JSON 对象中的 blob,因为 websocket 只能发送字符串或数组缓冲区。

我尝试了很多不同的方法来一起发送 JSON 和 blob,但没有任何效果。

有什么帮助吗?

是否可以在客户端仅使用 Engine.IO 来将消息与 blob 和 JSON 打包在一起?关于这种方式有什么想法吗?

最佳答案

有很多方法可以序列化数据以通过二进制 Web 套接字发送。我建议考虑 CBOR,它序列化为二进制并且还支持其中的二进制数据。

NPM 上有多个 CBOR 库可供选择。

关于node.js - 一起发送 JSON 和 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51175919/

相关文章:

javascript - Socket.io 获取套接字所属的命名空间

node.js - Mac-bash : node: command not found

javascript - 无法使用 Express.js 从请求中获取 POST 正文

javascript - 脚本中的阻塞 Node

WebSocket 请求-响应子协议(protocol)

docker - GKE - 在运行时绕过 Pod LoadBalancer(Pod 的外部 IP)到 Pod 的容器 IP 以用于 WebSocket 目的

node.js - Socket.io授权发送了错误的cookie?

javascript - socket.io - iPad 总是超时,尽管它已连接

javascript - 数组和 ArrayBuffer 有什么区别?

javascript - 等待/异步匿名函数