Node.js& avconv - 实时视频转换

时间:2014-02-05 23:32:44

标签: node.js avconv

我正在开发实时视频转换演示应用。视频文件使用node-multiparty,文件part is pipedavconv.stdin进行解析,处理后chunk pipeswrite 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的{​​{1}}事件感兴趣。通常,在解析部件时应该触发事件,这意味着它已被上传。

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

800KB视频文件的上传方式更快,但看起来avconv流仍然没有空,等待part处理数据。

我是对的还是还有其他的东西?

1 个答案:

答案 0 :(得分:1)

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