Я пытаюсь конвертировать видео YouTube в mp3 через мой сервер Node.js, используя 'ytdl-core' и 'fluent-ffmpeg'.Поскольку сервер предназначен для одновременной обработки нескольких запросов, я подумал, нужен ли async.js для преобразования видео в эффективный по времени способ.
Интересно, однако, что при тестированииобработка нескольких запросов с использованием и без использования async.js, результат, кажется, одинаков в обоих направлениях - время, необходимое для преобразования 3 видео, одинаково.
Вот код, который я использую безasync.js:
server.get('/download/:id', (req, res) => {
const id = req.params.id;
let stream = ytdl(`https://www.youtube.com/watch?v=${id}`);
ffmpeg(stream)
.audioCodec('libmp3lame')
.audioBitrate(128)
.toFormat('mp3')
.save(`public/downloads/${id}.mp3`)
.on('error', err => {
console.log(err);
})
.on('end', () => {
console.log('file downloaded');
send(req, `public/downloads/${id}.mp3`).pipe(res);
});
});
И этот код использует async.js:
let queue = async.queue((task, callback) => {
let stream = ytdl(`https://www.youtube.com/watch?v=${task.id}`);
ffmpeg(stream)
.audioCodec('libmp3lame')
.audioBitrate(128)
.toFormat('mp3')
.save(`public/downloads/${task.id}.mp3`)
.on('error', err => {
console.log(err);
callback(err)
})
.on('end', () => {
send(task.req, `public/downloads/${task.id}.mp3`).pipe(task.res);
callback('file sucessfully downloaded');
});
}, 5);
queue.drain = function() {
console.log('all items downloaded');
}
server.get('/download/:id', (req, res) => {
queue.push({req: req, id: req.params.id, res: res}, err => {
console.log(err);
});
});
У кого-нибудь есть идеи, почему оба метода завершают преобразование примерно в одно и то же время?Я полагаю, что использование async.js должно завершить преобразование видео быстрее из-за параллельной обработки, но это не так.
Любые мысли будут высоко оценены!