【发布时间】:2013-09-18 05:22:09
【问题描述】:
我有以下情况。我通过带有context.getImageData().data 的画布捕获网络摄像头帧。当我 console.log() 他们时,这给了我一个很好的数组(或 UInt8ClampedArray 说 Bidelman)像 [r, g, b, a, r, g, b, a, r, g, b, a, etc.] 这样的整数。现在我想通过 binaryjs 将它发送到 node.js 服务器,当然数据会像地狱一样被打乱:https://gist.github.com/thgie/6550638
如何先将数组转换为二进制文件,或者如何将二进制文件恢复为可读数组?
代码示例
客户:
client.send(ctx.getImageData(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT).data, {'id': 'bin', 'frame': frame});
服务器:
client.on('stream', function(stream, meta){
var bufs = [];
stream.on('data', function(data){
bufs.push(data);
});
stream.on('end', function(){
var buf = Buffer.concat(bufs);
fs.writeFile(__dirname + "/tmp/"+meta.frame+".dat", buf, "binary", function(err) {
if(err) {
console.log(err);
} else {
console.log("The file was saved!");
}
});
});
}
看起来像这样:
H>DÿNDJÿL@FÿPCJÿR@KÿQ?IÿLDPÿKCOÿMCKÿLAIÿL@DÿL@DÿLBGÿKAFÿIAHÿLDLÿLAIÿLAIÿO@IÿO@IÿIAJÿJBKÿMCIÿNDJÿQEIÿQEIÿPGHÿOFGÿMIHÿMIHÿPDFÿNCEÿIBDÿLEHÿPDFÿPDFÿMHLÿLGKÿMHLÿNIMÿOGLÿNFKÿOEMÿPFNÿRFSÿPERÿPERÿPERÿRGOÿSHPÿSGMÿSGMÿRJRÿQIPÿQJNÿRKPÿRKPÿQJNÿSGMÿSGMÿOHJÿSLOÿQJLÿRKMÿSIJÿTKKÿQLPÿPJNÿSLQÿRKPÿSLQÿUMRÿSKSÿUMTÿVMWÿSKUÿUJUÿRGQÿUMTÿUMTÿSKUÿVMWÿSMTÿSMTÿQNVÿQNVÿSMVÿTNWÿZMVÿXKTÿUJUÿVKVÿTOSÿTOSÿWQUÿWQUÿYTVÿYTVÿXRVÿUPTÿYSZÿYSZÿXRVÿZUYÿWPRÿYRTÿWRQÿXSRÿVOOÿWPPÿXRVÿXRVÿZOYÿ[P[ÿZO[ÿ\Q^ÿZT_ÿZT_ÿZV`ÿZV`ÿ]T^ÿ]T^ÿ^TZÿ`V[ÿ[VXÿ[VXÿ]UZÿ^V[ÿZV`ÿ[Waÿ_Xdÿ_Xdÿ]X`ÿ]X`ÿaZ_ÿaZ_ÿ_Y]ÿ`[_ÿ`Y]
【问题讨论】:
-
如果您使用的是 binaryjs,那么它会为您完成。确保您在服务器端和客户端使用 binaryjs 进行通信,它会为您处理压缩和解压缩。
-
那我对缓冲区做错了。因为无论我如何转换它,我都会得到混乱的痕迹。
-
您传递给
fs.writeFile的buf参数是一个实际的缓冲区,对吧?显然,有些东西正在对您的数据进行字符串化。 -
我很确定这是一个缓冲区。来自 binaryjs 的文档:在 Node.js 上,二进制数据作为缓冲区接收。但我不发送二进制数据。我发送了一个数组,但我不相信 binaryjs 可以为我解决这个问题。也许如果我发送一个 ArrayBuffer。
标签: javascript node.js binary websocket