Node JS radio (аудиопоток)

Добрый вечер! Я просто пытаюсь сделать свое собственное интернет-радио, используя Node JS. Я видел много вопросов и уроков по этому поводу, но все они старые и трудные для понимания.

const fs = require('fs'),
files = fs.readdirSync('./music'), // I have some mp3 in music folder
clips = [],
dhh = fs.createWriteStream('./tracks.mp3'); // create output stream

let stream, currentfile;

files.forEach(file => {
  clips.push(file);
});

// recursive function
const main = () => {
  if (!clips.length) {
    dhh.end('Done');
    return;
  }

  currentfile = './music/' + clips.shift();
  stream = fs.createReadStream(currentfile);

  stream.pipe(dhh, { end: false });

  stream.on('end', function() {
    console.log(currentfile + ' appended');
    main();
  });
};

main();

Так что у меня есть все мои mp3 в одном файле. Что я могу сделать для потоковой передачи этого файла множеству разных пользователей, когда они подключены. Множество ответов об этом совете используют BinaryJS, но он был написан около 5 лет назад. Я просто не с чего начать, поэтому мне нужна ваша помощь. Спасибо!

Я пробовал что то подобное

const http = require('http'),
fs = require('fs'),
filePath = './music/my.mp3',
stat = fs.statSync(filePath);

http.createServer(function(request, response) {
  fs.createReadStream(filePath).pipe(response);

  response.writeHead(200, {
    'Content-Type': 'audio/mpeg',
    'Content-Length': stat.size,
  });

}).listen(4000);

Когда пользователь подключается к порту 4000, музыка начинает воспроизводиться, но это не онлайн, когда другой пользователь подключает музыку, также играющую с самого начала, но я хочу сделать это как онлайн-радио. Но это не работает:(

0 ответов

Я также пытаюсь сделать то же самое, ур делать, и нашел очень информативный блог статьи здесь. В нем есть только одна вещь: он не объясняет, как добавлять объекты для записи / потребителей на сервер, поэтому он неполный. Но вы можете создать 90% вашего радио из остального. Также я использовал другой подход, поэтому я хотел бы поделиться им здесь, чтобы помочь другой душе. ('Writable1' не определен) Не стесняйтесь исправлять код.

const express = require('express'),
    router  = express.Router(),
    fs      = require('fs');
    Throttle = require('throttle'),
    ffprobe = require('ffprobe'),
    ffprobeStatic = require('ffprobe-static');

    // Play all songs from db
    router.get('/', function(req, res){

    const bitRate = ffprobe('myAudio.mp3', { path: ffprobeStatic.path }, function(err, info){
        console.log(info.streams[0].bit_rate);
    });
    const readable = fs.createReadStream('myAudio.mp3');
    const throttle = new Throttle(bitRate / 8);
    const writables = [writable1, writable2, writable3];

    readable.pipe(throttle).on('data', (chunk) => {
           for (const writable of writables) {
           writable.write(chunk);
         }
      });

    });

    module.exports = router;
Другие вопросы по тегам