Цепочка потоков Nodejs - PullRequest
       22

Цепочка потоков Nodejs

0 голосов
/ 01 января 2019

Здравствуйте, я хотел бы связать некоторые fileReadStreams, мое текущее использование выглядит примерно так:

  1. порождает дочерний процесс
  2. создать файлReadStream
  3. отправить файлсодержимое через канал (child.stdin)
  4. вернуться к шагу 2

Я пытаюсь отправить некоторые mp3-файлы, используя pipe, в ffmpeg, чтобы он мог выводить бесконечный hls & mpeg-основанный на дефисе поток.

PS: я пытался finished событие writeableStream, но если его завершить, триггер child.stdin закрывается с помощью writableStream.Если я передам флаг, чтобы не закрыться, я никогда не получу законченное событие.

1 Ответ

0 голосов
/ 02 января 2019

Я использовал потоки PassThrough, результаты не идеальны, но в моем случае это нормально.Если кому-то нужно что-то подобное, вот как я с этим справился;

const {PassThrough} = require('stream');

const pt = new PassThrough();

/* spawn child process */
/* PS: I do not know why direct pipe to ffmpeg does not work in my case throws pipe: Permission denied */
const child = spawn(
    'cat',
    ['|', 'ffmpeg', ...],
    {
        stdio: ['pipe', 'inherit', 'inherit'],
        shell: true
    });

pt.pipe(child.stdin);

/* pass streams to pt stream with end false parameter */
stream1.pipe(pt, { end: false }); /* This also prevents stream1 finished event, but otherwise it would close the pt stream. */
stream2.pipe(pt, { end: false }); /* Or you can handle this part programmatically(loops, generators etc) */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...