Необходимо направить вывод видео RTSP на стандартный вывод - PullRequest
1 голос
/ 19 апреля 2019

Мне нужно, чтобы gstreamer брал видео из URI rtsp и отправлял видео на stdout, чтобы имитировать подобное поведение с помощью беглого ffmpeg.

Я могу сделать это на терминале (и получить необработанные двоичные данные), но, находясь внутри узла, я получаю:

"ошибочная синтаксическая ошибка конвейера".

gst-launch-1.0 uridecodebin silent=true uri=rtsp://192.168.x.x:8800/test.stm ! fdsink fd=1 

когда указанная выше команда используется с «autovideosink», я могу просматривать видео.

Причина, по которой мне нужно использовать stdout, заключается в том, что существующее приложение использует fluent-ffmpeg ион использует "pipe: 1", что в основном то же самое.Я хочу вызвать возможное нарушение работы существующего приложения.

Внутри приложения узла я вызываю gst-lauch-1.0 с помощью команды spawn, как в:

var gstreamerProc = spawn(command, args, options);

где:

 command: '/usr/bin/gst-launch-1.0'
 args:     ["uridecodebin","silent=true","uri=rtsp://192.168.x.x:8800/test.stm","!","queue","! fdsink fd=0"]
 options:  {"captureStdout":false,"niceness":0}"

И в оригинальном файле fluent-ffmpeg / lib / processor.js этот комментарий описывает значения, найденные в "options"

  /*
   :
   * The 'options' argument may contain the following keys:
   * - 'niceness': specify process niceness, ignored on Windows (default: 0)
   * - `cwd`: change working directory
   * - 'captureStdout': capture stdout and pass it to 'endCB' as its 2nd argument (default: false)
   * - 'stdoutLines': override command limit (default: use command limit)
   *
   :
   */

Как я уже говорил выше, в командной строкеработает на обычном терминале, без ошибок, без предупреждений, когда он помещается внутри Node.js, он выдает

«ошибочный конвейерный синтаксис»

предупреждение.Любая помощь в решении этой проблемы очень ценится.

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Ну, я понял, что случилось. Я установил GST_DEBUG_FILE=/tmp/gst_debug.log и GST_DEBUG=*:7, чтобы повысить уровень ведения журнала как на терминале, так и в приложении node.js. и заметил следующее: enter image description here

Как видите, синтаксический анализ gstreamer не любит экранированные пространства. Затем я установил аргумент опции shell: true, переданный в spawn , и ошибка исчезла. Спасибо.

1 голос
/ 19 апреля 2019

Не эксперт .js - но я думаю, что это:

args:     ["uridecodebin","silent=true","uri=rtsp://192.168.x.x:8800/test.stm","!","queue","! fdsink fd=0"]

должно быть:

args:     ["uridecodebin","silent=true","uri=rtsp://192.168.x.x:8800/test.stm","!","queue","!","fdsink","fd=0"]

Я думаю, что вы пропустили " и ,.

...