0

我正在开发实时视频转换演示应用程序。node-multiparty视频文件使用, 文件的part is pipedto解析,avconv.stdin处理时使用chunk pipesto write stream

这是源代码的一部分:

var form = new multiparty.Form(),
    args = ['-i', 'pipe:0', '-f', 'webm', 'pipe:1'],
    avconv = spawn('avconv', args),
    output = fs.createWriteStream(filePath);

form.on('part', function (part) {
  if (part.filename) {
    part.pipe(avconv.stdin);

    part.on('end', function() {
      console.log('===== Video has been uploaded! =====');
      avconv.stdin.end();
    });
  }
});

avconv.stdout.pipe(output);

我对end附加到文件的事件感兴趣part。通常应该在解析部分时触发该事件,这意味着它已被上传。

我有一个测试视频文件(~800KB)和一个用于测试的低级笔记本电脑。在 localhost 上运行测试时,end事件在avconv转换过程的最后触发,持续约 15 秒。

800KB 的视频文件上传速度更快,但看起来part流仍然不是空的,等待数据处理avconv

我是对的还是另有原因?

4

1 回答 1

1

你是绝对正确的。流仅在完全消耗时才Readable发出事件。end看看这里:http ://nodejs.org/api/stream.html#stream_event_end

于 2014-02-06T20:50:50.893 回答