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

时间:2018-02-19 16:53:24

标签: node.js audio grpc

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

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

所以我发现其他不使用getUserMedia的npm软件包(节点麦克风和麦克风),但他们不允许轻松检索流上的缓冲区(或者我不知道怎么做)。例如,我可以看到" mic"页面(https://www.npmjs.com/package/mic):

<ol>
  <li>Number One</li>
  <li>Number Two
    <ol>
      <li>Number Two - One</li>
      <li>Number Two - Two</li>
      <li>Number Two - Three</li>
    </ol>
  </li>
  <li>Number Three
    <ol>
      <li>Number Three - One</li>
      <li>Number Three - Two
        <ol>
          <li>Number Three - Two - One</li>
          <li>Number Three - Two - Two</li>
        </ol>
      </li>
    </ol>
  </li>
  <li>Number Four</li>
</ol>

我应该解析数据&#39;整数(int32)使gRPC流可能?我怎样才能做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,感谢迈克尔,我设法实现了我想要做的事情。

首先,我注意到如果一个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');

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