通过 gRPC 从麦克风流式传输音频

Streaming audio from microphone over gRPC

我想设计一个 client/server 系统,其中客户端从麦克风录制音频并将其流式传输到服务器以进行进一步处理。我打算将 gRPC 与 NodeJS 客户端一起使用(我无法控制服务器)。

但我真的不知道该怎么做。我发现 npm 包 "microphone-stream" 似乎完全符合我的需要 (https://www.npmjs.com/package/microphone-stream),因为我可以从麦克风录音并分别获取每个缓冲区,以便将它们发送到服务器。 不幸的是,这个包使用了 getUserMedia API,这意味着我不能在普通的 NodeJS 中使用它。

所以我找到了其他不使用 getUserMedia 的 npm 包(node-microphone 和 mic),但它们不允许轻松检索流上的缓冲区(或者我只是不知道该怎么做).例如,我可以在 "mic" 页面上看到 (https://www.npmjs.com/package/mic) :

micInputStream.on('data', function(data) {
    console.log("Recieved Input Stream: " + data.length);
});

我是否应该将 'data' 解析为整数 (int32) 以使 gRPC 流成为可能?我怎样才能做到这一点?

谢谢!

好的,多亏了 Michael,我才实现了我想做的事情。

首先,我注意到如果 console.log() 我的缓冲区,我得到了这样的东西。

micInputStream.on('data', function(data) {
    console.log(data); // --> <Buffer 52 49 46 46 24 00 00 80 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 02 00 80 3e 00 00 00 fa 00 00 04 00 10 00 64 61 74 61 00 00 00 80>
});

这让我想到了以下 API:https://nodejs.org/docs/latest/api/buffer.html。从那以后,我使用

data.toString('base64')

为了得到一个字符串,我可以通过 gRPC 从 client-side 发送它。

在 server-side,我使用了...

var serverBuffer = Buffer.from([data received over gRPC], 'base64');

...为了重建我的缓冲区。就是这样,我现在可以在服务器端处理客户端的缓冲区了。