Отправка потока из браузера на сервер Node JS - PullRequest
3 голосов
/ 19 марта 2020

Общая идея: я создал Node JS программу, которая взаимодействует с несколькими API, чтобы воссоздать домашнего помощника (например, Алексию или Сири). Он взаимодействует в основном с IBM Watson. Моей первой целью было настроить Dialogflow так, чтобы у меня был реальный ИИ, обрабатывающий вопросы, но из-за обновления до Dialogflow v2 мне пришлось использовать Google Cloud, и это слишком много проблем для меня, поэтому я только что получил ручной скрипт он читает возможные ответы из настраиваемого списка.

Моя настоящая цель - получить от пользователя аудиопоток и отправить его в мою основную программу. Я настроил express сервер. Он отвечает страницей 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» на французском lol

1 Ответ

2 голосов
/ 19 марта 2020

Большинство браузеров, но не все (я смотрю на вас, Mobile Safari), поддерживают захват и потоковую передачу аудио (и видео, которые вам не нужны) с помощью API getUserMedia() и MediaRecorder , С помощью этих API вы можете передавать захваченное аудио небольшими порциями через WebSockets или socket.io или серию запросов POST на ваш сервер nodejs. Затем сервер nodejs может отправить их в службу распознавания. Проблема здесь: аудио сжато и инкапсулировано в webm. Если ваша служба принимает аудио в этом формате, эта стратегия будет работать для вас.

Или вы можете попробовать использовать node-ogg и node-vorbis для принятия и декодирования , (Я этого не делал.)

Могут быть и другие способы. Может быть, кто-то, кто знает, ответит.

...