gstreamer-imx потоковое видео и кодирование - PullRequest
1 голос
/ 09 июля 2020

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

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

  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

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

   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, которые определяют, какой элемент может быть связан (например, возможность v4l2sr c видео / x-raw включает I420, поэтому я могу связать этот элемент с imxvpuenc_h264 ). Однако для элемента tee, разделяет ли он и воспроизводит ли он возможности sr c?

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

1 Ответ

0 голосов
/ 18 июля 2020

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

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