Google chrome extension 如何将二进制数据从Google Chrome扩展发送到本机应用程序

Google chrome extension 如何将二进制数据从Google Chrome扩展发送到本机应用程序,google-chrome-extension,chrome-native-messaging,Google Chrome Extension,Chrome Native Messaging,我正在将数据从Google Chrome扩展发送到用C#开发的本机应用程序,但是,这仅在我发送短文本消息时有效,而在数据为二进制(JSON编码)时无效 例如,要从分机发送命令,我正在呼叫: port.postMessage({ command: 'Rates', info: request.setRates }); 其中,port是本机消息传递应用程序连接,request.setRates是{setRates:“framesPerSecond=15&audioBitrate=22050”} 通

我正在将数据从Google Chrome扩展发送到用C#开发的本机应用程序,但是,这仅在我发送短文本消息时有效,而在数据为二进制(JSON编码)时无效

例如,要从分机发送命令,我正在呼叫:

port.postMessage({ command: 'Rates', info: request.setRates });
其中,
port
是本机消息传递应用程序连接,
request.setRates
{setRates:“framesPerSecond=15&audioBitrate=22050”}

通过C#应用程序中的STDIN可以完美地接收到这一点

但是,如果我将此指令称为:

port.postMessage(request.binaryStream);
其中,
request.binaryStream
{“数据”:[26,69223163163,66134129,1,66247129…122235208,2,56,64163],“内容类型”:“x-media”}

这在本机应用程序中收到的效果很差。数据长度约为77KB,在这种情况下,我收到了如下信息:
0215214171175125107235,95,9425021515190181,…
,当然它是一个无效的JSON字符串。似乎正在产生某种缓冲区溢出

如何做到这一点

编辑:

目前的最后一次尝试是对数组进行base64编码:

mediaRecorder.ondataavailable = function (e) {
    e.data.arrayBuffer().then(buffer => {
        chrome.runtime.sendMessage(appId, { binaryStream: Uint8ToBase64(new Uint8Array(buffer)) }, function (response) {
            console.log(response);
        });
        stopStream();
    });
这样,就会将其发送到本机应用程序(一个接一个):

在本机应用程序中接收到:

^  {"command":"Binary","data":"QgaBAACA+4O2l3/8ZtVmH2JXfcZSfs+ulepr+aF2U5d+kW0SDuRqP9n9baILWx2vK/6vraUaEqNo9Tf7htznm8o72wjRTzgjZFyfSf+k4BZDp9luH6Un1JWAhbNem.........ddddddddddddddddddddddddddddddddddddddddddeow=="}
请注意,接收的数据是第二次发送的数据,但该接收数据的结尾是第一次发送的数据的结尾。因此,缓冲区溢出可能是正确的。有什么解决办法吗?我有一个使用TCP套接字的相同程序,它可以工作,但现在,我需要使用本机消息传递。STDIN缓冲区是否非常小


Jaime

nativeMessaging API使用JSON序列化,这不适用于类型化数组、数组缓冲区和其他高级类型。您需要手动将其转换为标准数组或字符串。@wOxxOm请查看已编辑的问题。我现在发送的是base64字符串,而不是二进制数组。若要发送多条消息,请切换到使用基于端口的chrome.runtime.connectNativeAm我已经没有使用基于端口的connectNative?您没有显示该代码,所以我假设您没有。
^  {"command":"Binary","data":"QgaBAACA+4O2l3/8ZtVmH2JXfcZSfs+ulepr+aF2U5d+kW0SDuRqP9n9baILWx2vK/6vraUaEqNo9Tf7htznm8o72wjRTzgjZFyfSf+k4BZDp9luH6Un1JWAhbNem.........ddddddddddddddddddddddddddddddddddddddddddeow=="}