Google chrome extension 如何将二进制数据从Google Chrome扩展发送到本机应用程序
我正在将数据从Google Chrome扩展发送到用C#开发的本机应用程序,但是,这仅在我发送短文本消息时有效,而在数据为二进制(JSON编码)时无效 例如,要从分机发送命令,我正在呼叫: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”} 通
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缓冲区是否非常小
JaimenativeMessaging API使用JSON序列化,这不适用于类型化数组、数组缓冲区和其他高级类型。您需要手动将其转换为标准数组或字符串。@wOxxOm请查看已编辑的问题。我现在发送的是base64字符串,而不是二进制数组。若要发送多条消息,请切换到使用基于端口的chrome.runtime.connectNativeAm我已经没有使用基于端口的connectNative?您没有显示该代码,所以我假设您没有。
^ {"command":"Binary","data":"QgaBAACA+4O2l3/8ZtVmH2JXfcZSfs+ulepr+aF2U5d+kW0SDuRqP9n9baILWx2vK/6vraUaEqNo9Tf7htznm8o72wjRTzgjZFyfSf+k4BZDp9luH6Un1JWAhbNem.........ddddddddddddddddddddddddddddddddddddddddddeow=="}