Как создать очередь потокового аудио в реальном времени?

Итак, я думаю о создании приложения узла, в котором пользователи могут добавлять песни в «очередь» и транслировать песни всем пользователям в режиме реального времени, но, осмотревшись, я не совсем уверен, как это сделать.

Первая статья, которую я прочитал, была следующей: http://pedromtavares.wordpress.com/2012/12/28/streaming-audio-on-the-web-with-nodejs/

Кажется, что сервер icecast может очень хорошо с этим справиться, но есть ли способ для Node помещать песни в очередь для воспроизведения на сервере icecast? Пока что из того, что я читал, кажется, что единственный способ управлять воспроизводимыми песнями — это указать список воспроизведения или добавить песни вручную, и указание серверу ничего не воспроизводить, когда в очереди нет песен, также кажется потенциальной проблемой.


person aftrumpet    schedule 30.04.2014    source источник


Ответы (1)


Недавно я работал над подобным проектом. Мое решение состояло в том, чтобы использовать nodeshout (привязка узла для libshout) для отправки аудиоданных из Node в Icecast.

Посмотрите пример потоковой передачи. Вы можете использовать его так:

function playSong(){
    // Choose next song
    const nextSong = "./song.mp3";
    const fileStream = new FileReadStream(nextSong, 65536);
    const shoutStream = fileStream.pipe(new ShoutStream(shout));

    shoutStream.on('finish',playSong);
}

playSong()

Это создаст петлю и будет воспроизводить песню за песней.

Совет: увеличьте тайм-аут источника в icecast.xml до ~30 секунд. В некоторых случаях, по умолчанию, это приводит к завершению потока из-за песен, имеющих «быстрый старт», когда начало песни имеет более низкий битрейт (чтобы начать воспроизведение быстрее).

Я сделал Gist с еще одним примером: https://gist.github.com/Cretezy/3623fecb1418e21b5d1f77db50fc7e07

person Charles Crete    schedule 26.04.2017