我正在尝试为我的应用程序设置聊天功能,我想知道最好的方法。
到目前为止,这是我的设想:
用户决定并选择他想与谁通信,然后他记录一个音频消息,该消息保存为一个文件并将其发送到 websocket。
由于 Socket.IO 的 android 实现不包括 .to(socketId)
方法 我需要在 JSON 中传递消息的预期接收者的 ID(以及一些其他消息相关数据),然后可以读取服务器以便使用适当的 .to(socketId)
发出消息称呼。由于我想发送文本和音频,我将音频文件转换为 byte[] byteArrayOfAudio
然后使用 new String(byteArrayOfAudio)
将其转换为字符串。然后我将这个字符串添加到 JSON 中,并将实际文本发送到 websocket。
服务器读取消息并找到与接收者的用户 ID 匹配的连接 ID(socketId)。然后将消息转发给适当的接收者。接收器解码 json 获取音频字符串,将其转换为 byte[],然后将其转换回适当的音频格式,然后接收器可以播放它。
我的问题是:
音频文件相当小(最大 50kb),如果 yield 不显着,我希望音频文件和相关文本数据在一个
.emit()
中发送任何有用的信息将不胜感激
最佳答案
我建议您避免使用 json 发送音频...当使用 websockets 时,完全由您来定义客户端和服务器之间的协议(protocol)...每个 websocket 消息必须是文本消息或二进制消息...使用发送音频未包装在 json 中的二进制消息类型
当您发送每个音频缓冲区时单独发送它,没有其他属性...一旦在接收端以这种方式发送,测试传入的 websocket 消息的类型并将二进制消息与文本消息流量分开处理
要唯一标识此二进制流量的发送者,您可以使用一些发送者 id 标记此缓冲区内的元数据...或者在发送者端,您可以创建二进制音频缓冲区的哈希以充当该缓冲区的唯一标识符,然后发送一个带有此哈希和发送者 id 标签的 json 消息,因此接收方知道它的到来,并且可以唯一地将下一条二进制消息与发送者匹配
关于android - 通过 Socket.io websocket 从我的应用程序向特定的 socketId 发送 json 和音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60907601/