0

我的应用程序使用 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

此外,消息是二进制格式。

4

1 回答 1

0

回答我自己的问题。问题是 PeerJS 使用 JS 二进制序列化库,为了反序列化它,我需要将该库写入 Java 代码。

原始的 Android/Java 无法做到这一点。

JS 库称为 binarypackJS。

(另外值得一提的是,您实际上可以使用 JSON 与 peerJS 进行通信,您需要做的就是将 msg 类型启用为 'json' 而不是 'binary'。

于 2018-08-24T18:24:35.983 回答