Хобрук: Ваш путь к мастерству в программировании

Необходимо направить видеовыход rtsp на стандартный вывод

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

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

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

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

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

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

Внутри приложения node я вызываю 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 этот комментарий описывает значения, найденные в «опциях».

  /*
   :
   * 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, она выдает

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

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

18.04.2019

  • Покажите нам код, который не работает? 19.04.2019
  • Спасибо, Флориан, добавлены детали вызова. 19.04.2019

Ответы:


1

Не эксперт по .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"]

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

19.04.2019
  • Спасибо, это артефакт того, куда выдвигается аргумент. Поведение по умолчанию для Fluent ffmpeg — нажать канал: 1 в конце построения массива args, я заменил это в коде на ! fdsink fd=1, так что на самом деле это то же самое. Раньше я использовал его как один из необязательных аргументов, и результат был таким же. Каждый отдельный компонент будет объединен, чтобы получить: 19.04.2019
  • uridecodebin молчание=true uri=rtsp://192.168.1.121:8554/sensor_1001.stm ! h264parse ! очередь ! fdsink fd=0 19.04.2019
  • Для последнего вам, вероятно, потребуется установить свойство caps в decodebin. В противном случае он будет декодирован в необработанные буферы, которые не будут вписываться в h264parse. Однако это должно привести к другой ошибке, отличной от синтаксиса конвейера. 19.04.2019
  • Спасибо, Флориан. Хотя ваш комментарий к последней команде я добавил для уточнения (и забыл удалить h264parse из ), он проливает некоторый свет на то, что может быть не так в моем вызове. Я буду продолжать использовать decodebin с h264parse и соответствующим образом определять заглавные буквы в надежде, что это решит проблему. 19.04.2019

  • 2

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

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

    24.04.2019
  • Небольшая корректировка моего первоначального ответа. Я попробовал это, не устанавливая sell = true, а просто удалив пробел между ! и fdsink, и он тоже работал нормально. Таким образом, проблема синтаксического анализа связана с ведущим пробелом. 26.04.2019
  • Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...