Описание приложения
Node.js + Express.js
Приложение подает видеопоток с камеры Raspberry Pi 3 наконечная точка.Поток частично работает.
Проблема
Работает только для одного клиента.Когда второй клиент запрашивает потоковую передачу, поток прерывается - второй клиент не получает никаких данных, и первый подключенный клиент прекращает получать дальнейшие данные.
Код
const { spawn } = require('child_process');
const express = require('express');
const router = express.Router();
const vstream = spawn('raspivid', ['-t', '9999999', '-o', '-', '-n']);
router.get('/stream', (req, res) => {
vstream.stdout.pipe(res);
});
module.exports = router;
Я думаю, чтопроисходит
Когда код запускается, дочерний процесс, который выполняет необходимую команду для записи видео с камеры, запускается с spawn()
.Этот процесс выводит поток в его stdout
.
Когда клиент запрашивает потоковую передачу, поток передается по конвейеру к объекту результата, т. Е. До тех пор, пока raspivid
выводит что-то, что клиент получает его как частичные ответы.
Вопрос
Интересно, когда второй (и третий, и т. Д.) Клиент запрашивает потоковую передачу, что происходит вокруг vstream.stdout.pipe(res)
для прерывания потока?Должен ли я клонировать поток вывода из vstream
как-то?Или я должен использовать совершенно другой подход к проблеме?