javascript - 如何解析数据和二进制 websocket 消息?

标签 javascript parsing binary websocket message

我找到了 this great page显示如何流式传输视频。

他的代码假设onmessage数据是jpg这样的

ws.onmessage = function (e) {
    $("#image").attr('src',  'data:image/jpg;base64,'+e.data);
}

但我也想要音频和其他页面数据。

如何让WebSockets解析消息类型和二进制类型?

最佳答案

Websocket 消息中的数据可以是字符串(文本消息)或二进制数据。在您的情况下,它是字符串数据,其中字符串内容是二进制图像的 base64 编码。 在更好的优化程序中,图像也可以二进制传输。

根据消息类型,e.data 将是另一种类型。

  1. 如果消息是文本消息,则 e.data 将是字符串类型。
  2. 如果消息是二进制消息,则 e.data 将包含 ArrayBufferBlob 对象。您可以通过设置 WebSocket.binaryType 属性(例如 "arraybuffer")自行决定要接收哪种二进制数据表示形式。

您可以使用 instanceof 来检查您是否收到了二进制或文本消息。

如果你想传输不同类型的二进制数据,你可以在消息的开头使用一个标题来告诉客户端消息包含什么。例如。将二进制数据的第一个字节声明为 header 。如果第一个字节包含 1,则剩余数据是图片,如果第一个字节包含 2,则剩余数据是短音频样本,依此类推。 但是,由于您需要拆分或组合二进制数据数组,所以这对双方来说都有点困难。

或者,您可以在客户端和服务器之间使用多个并行的 websocket 连接。一个用于视频数据,一个用于音频数据,一个用于一般消息等。

关于javascript - 如何解析数据和二进制 websocket 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19322635/

相关文章:

parsing - FParsec 中的示例语法超出了示例范围?

python - 写入大型二进制文件时出现内存错误

javascript - 尽管支持 ISO 8601 日期格式,但 IE11 中的日期无效

c# - 如何在 C# 中转换或编写此 Javascript 数组

javascript - 哪个 Javascript 函数放置更好?

image - 我如何在 React Native 中实际使用 Image.capInsets?

c++ - 二进制转换中的十六进制与十进制

java - 使用泛型 Java 对数组/比较器进行二分搜索

javascript - 如何使用尚未安装的 Node 模块而不出现错误?

javascript - 如何删除 angular-ui-grid 列标题中的 "clear sort"状态?