Как транслировать живое аудио из браузера на сервер Icecast - PullRequest
0 голосов
/ 05 июня 2018

Есть ли способ отправки живого аудиовхода из браузера на сервер Icecast?

Я использую getUserMedia API для получения аудиовхода и хочу, чтобы это был прямой эфир на Icecastserver.

getAudioInput(){
  const constraints = { 
    video: false, 
    audio: {deviceId: this.state.deviceId ? {exact: this.state.deviceId} : undefined},
  };

  window.navigator.getUserMedia(
    constraints, 
    this.streamAudio, 
    this.handleError
  );
}

В моей функции streamAudio я хочу передать это на сервер Icecast.Могу ли я сделать это с каким-то xmlhttprequest или это нужно сделать через сокет?

1 Ответ

0 голосов
/ 06 июня 2018

К сожалению, сегодня это невозможно напрямую.См. Также: Выборка с ReadableStream в качестве тела запроса

По сути, браузеры не допускают потоковое тело HTTP-запроса.Таким образом, вы не можете выполнить длительный HTTP PUT с данными, сгенерированными на лету.Тело запроса должно быть полностью разрешено до отправки запроса.

Спецификации, касающиеся Fetch и интерфейса Streams, в браузере указывают, что должна быть возможность использовать поток в качестве тела запроса, но ни один браузер не реализуетсегодня.

Есть только два способа вывести потоки из браузеров сегодня.Одним из них является использование веб-сокетов.Это самый простой метод, и он требует от вас обработки кодирования ваших мультимедийных данных (обычно через API MediaRecorder).Второй способ - использовать WebRTC.С WebRTC вы можете либо напрямую использовать его обработку MediaStream (сложно сделать на стороне сервера), либо использовать его потоки данных.Нет никакого реального преимущества в использовании потоков данных и веб-сокетов, если вы просто отправляете данные непосредственно на сервер.

В прошлом я создавал веб-клиенты, использующие метод WebSocket.Смотрите также: https://stackoverflow.com/a/40073233/362536

...