Android WebRTC 从 javascript PeerJS 浏览器接收 JSON

Android WebRTC Receiving a JSON from a javascript PeerJS browser

我的应用程序使用 WebRTC 与使用 Chrome (PeerJS) 的浏览器通信,实际上是多个浏览器。因此,每当我在浏览器中创建一个块时,对等点都应该相互传递该浏览器的信息,据我所知它应该是 JSON。问题是,我无法以正确的方式对其进行格式化,即使 previous block 等信息是正确的,我收到的消息中也总是出现乱码。我只是觉得这不应该发生。

我想弄清楚发生了什么,我觉得 PeerJS 除了发送纯 JSON 之外还做了更多的事情。当我的应用程序通过 Offer/Answer/Candidate 的 WebSockets 进行通信时,它们的所有 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 通信,您需要做的就是启用消息类型为 'json' 而不是 'binary'。