gstreamer-imx потоковое видео и кодирование

В настоящее время я использую доску для разработки Nitrogen 6 Max. Я пытаюсь получить видео с моей веб-камеры через v4l2src, чтобы обратная связь передавалась в потоковом режиме и кодировалась для сохранения.

Это конвейер, и он работает:

  v4l2src device="/dev/video2" ! tee name=t
      t. ! queue ! x264enc ! mp4mux ! filesink location=test.mp4
      t. ! queue ! videoconvert ! autovideosink

Затем я попытался использовать библиотеку imx-gstreamer. Я потратил время на поиски и обнаружил, что это работает:

   gst-launch-1.0 -e videotestsrc num-buffers=1000 ! \
       video/x-raw,width=640,height=480,framerate=30/1 ! imxvpuenc_h264 ! \
       h264parse !  avdec_h264 ! filesink location=cx1.mp4

Однако, когда я пытаюсь использовать tee для разделения источника видео, он просто зависает, и мой сеанс терминала блокируется.

   gst-launch-1.0 -e videotestsrc num-buffers=1000 ! autovideoconvert ! tee name=t \
       t. ! video/x-raw,width=640,height=480,framerate=30/1 ! imxvpuenc_h264 ! h264parse ! avdec_h264 ! filesink location=cx1.mp4 \
       t. ! video/x-raw,width=640,height=480,framerate=30/1 ! autovideosink

Я попытался изолировать проблему путем кодирования через тройник и понял, что он работает, но создаваемый им видеофайл поврежден:

   gst-launch-1.0 -e videotestsrc num-buffers=1000 ! tee name=t \
       t. ! video/x-raw,width=640,height=480,framerate=30/1 ! imxvpuenc_h264 ! \
       h264parse !  avdec_h264 ! filesink location=cx1.mp4

Я пробовал использовать очереди, видеоконвертировать, но, похоже, не работает.

Также здесь еще один вопрос. Я новичок в возможностях GstElement, которые определяют, какой элемент можно связать (например, возможность v4l2src video / x-raw включает I420, поэтому я могу связать этот элемент с imxvpuenc_h264 < / em>). Однако для элемента tee он разделяет и воспроизводит возможности src?

Я новичок в gstreamer и не могу решить эту проблему. Может ли кто-нибудь помочь мне здесь?


person bernardlee99    schedule 08.07.2020    source источник


Ответы (1)


Несколько советов, которые могут вам помочь:

  • Как правило, вы всегда используете очереди на выходах тройника, чтобы он не блокировал ваши конвейеры.
  • Другой способ избежать блокировки - установить async=false в ваших элементах-приемниках.
  • Попробуйте установить dts-method=2 на mp4mux, чтобы увидеть, имеет ли это значение.
  • Первая строка для устранения неполадок при работе gstreamer использует файл debug. Пожалуйста, изучите и поделитесь выводом GST_DEBUG=2 gst-launch-1.0 ....
person Michael Gruner    schedule 17.07.2020