【问题标题】:Streaming audio from microphone over gRPC通过 gRPC 从麦克风流式传输音频
【发布时间】:2018-07-29 22:55:32
【问题描述】:

我想设计一个客户端/服务器系统,其中客户端从麦克风录制音频并将其流式传输到服务器以进行进一步处理。我打算使用 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);
});

我应该将“数据”解析为整数 (int32) 以使 gRPC 流式传输成为可能吗?我怎样才能做到这一点?

谢谢!

【问题讨论】:

  • 我不太确定,但在我看来,“on data”事件可能正在接收字节数组或字符串。您应该能够使用bytes 类型流式传输此类信息。请参阅 developers.google.com/protocol-buffers/docs/proto3#scalar - 底部条目是 bytes
  • 谢谢!你给了我答案的开始。请参阅下面的完整答案。

标签: node.js audio grpc


【解决方案1】:

好的,多亏了迈克尔,我终于实现了我想做的事情。

首先,我注意到如果 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 发送。

在服务器端,我使用...

var serverBuffer = Buffer.from([通过 gRPC 接收的数据], 'base64');

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

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 2014-12-20
    • 2014-10-23
    • 2020-09-28
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多