Как транслировать живое аудио с низкой задержкой - PullRequest
8 голосов
/ 12 мая 2019

Я запрограммировал сервер, который создает аудиопоток из аудиовхода моего MacBook, используя express , osx-audio и lame :

const http = require("http");
const express = require("express");
const audio = require("osx-audio");
const lame = require("lame");
const audioInput = new audio.Input();

const encoder = new lame.Encoder({
  channels: 2,
  bitDepth: 16,
  sampleRate: 44100,
  bitRate: 128,
  outSampleRate: 22050,
  mode: lame.STEREO
});

audioInput.pipe(encoder);

const app = express();
const server = http.Server(app);

app.get("/stream.mp3", (req, res) => {
  res.set({
    "Content-Type": "audio/mpeg",
    "Transfer-Encoding": "chunked"
  });
  encoder.pipe(res);
});

server.listen(3000);

На стороне клиента звук из этого аудиопотока включен как элемент , например:

<audio controls autoplay preload="none">
  <source src="./stream.mp3" type="audio/mpeg" />
  <p>Oops – your browser doesn't support HTML5 audio!</p>
</audio>

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

Однако звук, воспроизводимый браузером, отстает на несколько секунд от исходного сигнала. Кажется, хотя я использую preload="none", браузер буферизует довольно много аудиопотока, прежде чем он начнет его воспроизводить.

Чего-то очевидного здесь не хватает? Есть ли лучший способ получить звук в реальном времени с задержкой в ​​несколько миллисекунд вместо нескольких секунд?

Если вам интересно, полный исходный код моего проекта здесь, на GitHub .

1 Ответ

4 голосов
/ 21 мая 2019

Вместо того, чтобы заново изобретать колесо, вы можете использовать FFMPEG , объявленный как «Полное кроссплатформенное решение для записи, преобразования и потоковой передачи аудио и видео».

Пример:

ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp

Вы можете выбрать, с какой библиотекой (h.264, mpeg и т. Д.) Будет работать ваш браузер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...