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;