是否需要async.js同时处理多个ffmpeg转换?

时间:2019-02-15 21:18:29

标签: javascript node.js ffmpeg async.js

我正在尝试使用'ytdl-core'和'fluent-ffmpeg'通过我的Node.js服务器将youtube视频转换为mp3。由于服务器打算同时处理多个请求,因此让我开始思考是否需要async.js以高效的方式转换视频。

然而,有趣的是,在使用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应该可以更快地完成视频的转换,但事实并非如此。

任何想法都将不胜感激!

0 个答案:

没有答案