Я работаю над демонстрационным приложением для преобразования видео в реальном времени. Файл видео обрабатывается с node-multiparty
, файлом part is piped
до avconv.stdin
, а при обработке - chunk pipes
- write stream
.Node.js & avconv - преобразование видео в реальном времени
Вот часть исходного кода:
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 КБ) и низкоуровневый ноутбук для тестирования. При запуске теста на localhost, end
событие стреляет в самый конец процесса преобразования avconv
, который длится ~ 15 секунд.
Видеоролик 800KB загружен быстрее, но похоже, что поток part
все еще не пуст, ожидая обработки данных на avconv
.
Я прав, или есть другое?