将流从浏览器发送到Node JS服务器

时间:2020-03-19 14:25:58

标签: javascript node.js audio-streaming getusermedia

总体思路:我创建了一个Node JS程序,该程序与多个API交互以重新创建家庭助理(例如Alexia或Siri)。它主要与IBM Watson进行交互。我的第一个目标是设置Dialogflow,以便我可以使用真正的AI处理问题,但是由于Dialogflow v2的更新,我必须使用Google Cloud,这对我来说太麻烦了,所以我只用了一个手工制作的脚本从可配置列表中读取可能的响应。

我的实际目标是从用户那里获取音频流并将其发送到我的主程序中。我已经设置了快递服务器。当您在'/'上获取内容时,它会以HTML页面作为响应。页面如下:

<!DOCTYPE html>
<html lang='fr'>
   <head>
       <script>
           let state = false

           function button() {

               navigator.mediaDevices.getUserMedia({audio: true})
                   .then(function(mediaStream) {

                       // And here I got my stream. So now what do I do?
                   })
                   .catch(function(err) {
                       console.log(err)
                   });
           }
       </script>
       <title>Audio recorder</title>
   </head>
   <body>
       <button onclick='button()'>Lancer l'audio</button>
   </body>
</html>

当用户使用mediaDevices.getUserMedia()单击按钮时,它会记录用户的音频

我的配置如下所示: The config

我要寻找的是一种启动记录的方法,然后按一下停止按钮,当按下停止按钮时,它将自动将流发送到Node程序。如果输出是流,则最好使用它,因为它是IBM Watson的输入类型(否则我将不得不存储文件,然后读取然后删除)。

感谢您的关注。

有趣的事实:我图片的imgur ID以“ NUL”开头,在法语中大声笑为“ NOOB”

1 个答案:

答案 0 :(得分:2)

大多数浏览器,但不是全部(我正在看着您,Mobile Safari)都支持使用getUserMedia()和{{捕获和流式传输音频(和视频,您不在乎) 1}} API。使用这些API,您可以通过WebSockets,socket.io或一系列POST请求将捕获的音频以小块的形式传输到nodejs服务器。然后,nodejs服务器可以将它们发送到您的识别服务。这里的挑战是:音频被压缩并封装在webm中。如果您的服务接受该格式的音频,则此策略将为您工作。

或者您可以尝试使用node-oggnode-vorbis进行接收和解码。 (我还没有这样做。)

可能还有其他方法。也许有人知道会回答。