Я работаю над демонстрационным приложением для преобразования видео в реальном времени. Видеофайл анализируется с 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
, прикрепленное к файлу part
. Обычно событие должно запускаться, когда часть анализируется, что означает, что она была загружена.
У меня есть тестовый видеофайл (~ 800 КБ) и ноутбук низкого уровня для тестирования. При запуске теста на локальном хосте событие end
срабатывает в самом конце процесса преобразования avconv
, который длится ~ 15 с.
Видеофайл размером 800 КБ был загружен намного быстрее, но похоже, что поток part
все еще не пуст, ожидая обработки данных avconv
.
Я прав или тут что-то другое?