我正在开发实时视频转换演示应用。视频文件使用node-multiparty
,文件part is piped
至avconv.stdin
进行解析,处理后chunk pipes
至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
的{{1}}事件感兴趣。通常,在解析部件时应该触发事件,这意味着它已被上传。
我有一个测试视频文件(~800KB)和一个用于测试的低级笔记本电脑。在localhost上运行测试时,part
事件在end
转换过程结束时触发,持续时间约为15秒。
800KB视频文件的上传方式更快,但看起来avconv
流仍然没有空,等待part
处理数据。
我是对的还是还有其他的东西?
答案 0 :(得分:1)
你是对的。
Readable
流仅在完全耗尽时才会发出end
个事件。
看看这里:http://nodejs.org/api/stream.html#stream_event_end