android - Android WebRTC 从 javascript PeerJS 浏览器接收 JSON
问题描述
我的应用程序使用 WebRTC 与使用 Chrome (PeerJS) 的浏览器进行通信,实际上是多个浏览器。因此,每当我在浏览器中创建一个块时,对等点都应该相互传递该浏览器的信息,据我所知它应该是一个 JSON。问题是,我无法以正确的方式格式化它,我收到的消息中总是有乱七八糟的字符,即使像前一个块这样的信息是正确的。我只是觉得这不应该发生。
我试图弄清楚发生了什么,我觉得 PeerJS 正在做的不仅仅是发送纯 JSON。当我的应用程序通过 WebSockets 为 Offer/Answer/Candidate 进行通信时,它们的所有 JSON 都采用正常格式。
我的 RTC 数据通道的 onMessage 代码是:
@Override
public void onMessage(DataChannel.Buffer buffer) {
Charset utf8 = Charset.forName("UTF-8");
ByteBuffer byteBuffer = buffer.data;
CharBuffer charBuffer = utf8.decode(byteBuffer);
Log.d(TAG, "onMessage: " + byteBuffer.toString());
Log.d(TAG, "onMessage: " + charBuffer.toString());
}
我从浏览器收到的消息:
��typem�data��type�block��header��index�timestamp�����d�o���previousHash���@0ff530e5a7f0f7d88189e1a87c380cbe0a1a5de9a904278c4831592b0bfd7017�hash���@0d15980b550ce37fe347d08d27e7806980aa8fb65663e667c9c6630de7d69e8e�data��type�ART�timestamp�����d�o���contexthash���@a46887f22840ca5e7ac2368e1c090b3feab8f238788be71864831b48cac45a8f���requestingAcessPKey���VbBtHUR-LkiTMYpxrcF9MofNFa_fgHWLTQkpfSEvo1nksRmsUBiiG7k9eNbOjZ4IDPp61IO4BnA7hz4JiahslxM�signedMsg����0645fc574d2a2ea04018baf91f3b030dea3a4b66a862ae7ad5d6bd8c9d35ddbd18f49b853d75fd7578361046e28104bc6565c2aeb7df7aa7ea120851ea4b6fbf
此外,消息是二进制格式。
解决方案
回答我自己的问题。问题是 PeerJS 使用 JS 二进制序列化库,为了反序列化它,我需要将该库写入 Java 代码。
原始的 Android/Java 无法做到这一点。
JS 库称为 binarypackJS。
(另外值得一提的是,您实际上可以使用 JSON 与 peerJS 进行通信,您需要做的就是将 msg 类型启用为 'json' 而不是 'binary'。
推荐阅读
- python - 从 pandas 日期时间列中提取唯一的月度周期
- angular - 如何在角度 6 中将插值数据绑定到 ngModel
- mono - Mono 应用程序在我的 Raspberry Pi 上启动时不会运行
- java - Android Java:无法在 SD 卡上创建文件夹
- angular - Angular Rxjs 可观察链与 ngrx 存储
- reactjs - 无法将元掩码注入的当前提供程序获取到常量中
- c# - 如何将数字字符串解析为十进制并将其转换回字符串而不会有任何损失?
- javascript - 从内联元素访问 Web 组件中的类函数
- c++ - 当我可以创建共享指针时,为什么我不能创建指向数组的唯一指针?
- eclipse - IPerspectiveListener 未使用 savePerspectiveAs() 调用,还有其他选择吗?