В настоящее время я использую доску для разработки 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 и не могу решить эту проблему. Может ли кто-нибудь помочь мне здесь?