Получайте потоковое аудио с сервера NodeJS для клиентов

Мне нужно, чтобы в режиме реального времени транслировался аудиопоток с одного клиента на сервер и на несколько клиентов-слушателей.

В настоящее время у меня работает запись с клиента, и я передаю аудио через socket.io на сервер. Сервер получает эти данные и должен передавать аудио (также через socket.io?) Клиентам, которые хотят прослушивать этот поток. Это должно быть как можно больше реального времени (минимизировать задержку).

Я использую GetUserMedia для записи микрофона (совместимость браузера здесь не важна). Я хочу, чтобы клиенты использовали аудио-тег HTML5 для прослушивания потока. Данные, полученные на сервере, представляют собой фрагменты (в настоящее время упакованы по 700), упакованные в большой двоичный объект с типом audio / wav.

Это мой код для отправки на сервер:

mediaRecorder.ondataavailable = function(e) {
    this.chunks.push(e.data);
    if (this.chunks.length >= 700)
    {
        this.sendData(this.chunks);
        this.chunks = [];
    }
};
mediaRecorder.sendData = function(buffer) {
    blob = new Blob(buffer, { 'type' : 'audio/wav' });
    socket.emit('voice', blob);
}

На сервере я могу отправить блоки клиенту так же, как это:

socket.on('voice', function(blob) {
    socket.broadcast.emit('voice', blob);
});

На клиенте я могу играть так:

var audio = document.createElement('audio');
socket.on('voice', function(arrayBuffer) {
    var blob = new Blob([arrayBuffer], { 'type' : 'audio/wav' });
    audio.src = window.URL.createObjectURL(blob);
    audio.play();
});

Это работает для первого куска кусков, которые я отправляю, но вы не можете продолжать переходить на audio.src на новый источник URL, так что это не рабочее решение.

Я думаю, что мне нужно создать какой-то поток на сервере, который я могу вставить в аудио-тег HTML5 на прослушивающих клиентах, но я не знаю как. Полученные BLOB-объекты с кусками следует затем добавить в этот поток в режиме реального времени.

Каков наилучший подход для этого? Я делаю это правильно с клиентского микрофона на сервер?

Ответы на вопрос(2)

Ваш ответ на вопрос